84

Visual Studio 2005 で Web サイトを発行するときに、フォルダーまたはファイルを除外できますか? さまざまな環境の代替構成ファイルなど、ソリューション エクスプローラーで手元に置いておきたいさまざまなリソースがありますが、実際にはそれらをサーバーに公開したくありません。それらを除外する方法はありますか?.dll アセンブリなど、他の種類のプロジェクトを使用する場合、ファイルの [ビルド アクション] プロパティを [なし] に設定し、[出力ディレクトリにコピー] プロパティを [コピーしない] に設定できます。Web サイトでファイルの同様の設定を見つけることができません。

IDE がこの機能を提供していない場合、そのようなファイルを処理するための優れたテクニックを持っている人はいますか?

4

11 に答える 11

139

プロジェクト ファイル (.csproj、.vbproj など) に要素ExcludeFilesFromDeploymentと要素を追加して、ファイルとフォルダーを除外します。ExcludeFoldersFromDeploymentテキスト エディターでファイルを編集するか、Visual Studio でプロジェクトをアンロードしてから編集する必要があります。

PropertyGroup以下に示すように、適切な場所 (Debug、Release など)内の任意の場所にタグを追加します。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
  ... 
  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
  <ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> 
</PropertyGroup>

ワイルドカードがサポートされています。

上記の例を説明するには:

  • 1つ目は(プロジェクトのルートにある)と(プロジェクトのルートにある)をExcludeFilesFromDeployment除外しますFile1.aspxFolder2\File2.aspxFolder2
  • 2番目は、指定されたフォルダーとそのサブフォルダーExcludeFilesFromDeployment内のすべてのファイルを除外します.svn
  • (プロジェクトのルートにある) および(プロジェクトのルートにある) という名前のExcludeFoldersFromDeployment除外フォルダーFolder1Folder2\Folder2aFolder2

詳細については、MSDN ブログの投稿Web 配置: Web アプリケーションのプロジェクト ファイルによるファイルとフォルダーの除外を参照してください。

于 2013-07-14T09:31:44.437 に答える
38

驚くべきことに、Visual Studio 2012 の答えはここにはありません。

  • 緑のチェックマークが付いている答えは答えではありません。

  • 最高の「上向き」の回答は、2010 年の記事を参照しており、現在は正しくない csproj プロジェクト ファイルを編集する必要があると述べています。ExcludeFoldersFromDeployment XML 要素を Visual Studio 2012 csproj ファイルに追加しましたが、何もしませんでした。要素は無効と見なされました。これは、ExcludeFoldersFromDeployment が .pubxml ファイルに移動されたためです。

Web アプリケーションと Web サイトの場合は、.pubxml ファイルを編集します。

私の答えに従うか、後で見つけたこのガイドを試すことができます: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure- on-iis-and-skip-deleting-it-with-msdeployskiprules.html#sthash.MSsQD8U1.dpbs

はい、これは Web サイト プロジェクトだけでなく、Web サイトでも実行できます。Visual Studio Web サイト (Web サイト プロジェクトではない) でこのとらえどころのない除外機能を探してインターネットで長い時間を費やしましたが、以前はそれは不可能であると結論付けていましたが、次のように見えます。

[mypublishwebsitename].pubxml ファイル (Web アプリケーション プロジェクトの場合は ~/Properties/PublishProfiles、Web サイトの場合は ~/App_Data/PublishProfiles にあります) に、以下を追加するだけです。

  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
 <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>

<PropertyGroup>.pubxml ファイルのメイン要素の子として。リリースやデバッグなど、特定のビルド タイプをキー設定する場合を除き、新しい要素を追加する必要はありません。

ちょっと待って!!!

パブリッシュ構成で次の設定を使用して、宛先/ターゲット サーバーからファイルを削除する場合:

ここに画像の説明を入力

次に、Web パブリッシュ プロセスは、ソース/ターゲット サーバー上で除外されたものをすべて削除し<ExcludeFoldersFromDeployment>ます<ExcludeFilesFromDeployment>

MsDeploy スキップ ルールで救出:

まず、Web Publish は MSBuild 以外のもの (Task IO などと呼ばれる) を使用して発行しますが、バグがあり、スキップ ルールを認識しないため、.pubxml に次のように追加する必要があります。

<PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>

<WebPublishMethod>独自の.pubxmlに要素<PropertyGroup>を 1 つだけ含めることができると思われるかもしれませんが、独自の要素<PropertyGroup>に移動するまでスキップ ルールは呼び出されませんでした。はい、クレイジーですが、サーバー上のフォルダー/ファイルを除外し、削除しないようにするために、Web Publish でこれをすべて実行する必要があるという事実はクレイジーです。<WebPublishMethod><PropertyGroup>

.pubxml 内の実際の SkipRules、ExcludeFolders、および ExcludeFiles 宣言:

<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
 <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>

そして今、スキップルール(<Target>はあなたの.pubxmlの子です<Project>):(すべてのアクションをスキップするために空のままにしておくことができるかもしれませ<SkipAction>んが、私はそれをテストしていないので確信が持てません.

  <Target Name="AddCustomSkipRules">
    <Message Text="Adding Custom Skip Rules" />
    <ItemGroup>
      <MsDeploySkipRules Include="SkipConfigFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipPhotosFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Photos</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Web\.config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Temp</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

.また、 in a filePath Skip ルールをバックスラッシュでエスケープすることを忘れないでください。

于 2015-04-17T00:33:16.190 に答える
33

拡張子に基づいてファイルを識別できる場合は、 web.config の buildproviders タグを使用してこれを構成できます。拡張機能を追加し、それを ForceCopyBuildProvider にマップします。たとえば、発行アクションでコピーされる .xml ファイルを構成するには、次のようにします。

<configuration>...
    <system.web>...
        <compilation>...
            <buildProviders>
                <remove extension=".xml" />
                <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" />
            </buildProviders>

特定のファイルがコピーされないようにするには、同じことを行いますが、System.Web.Compilation.IgnoreFileBuildProvider をタイプとして使用します。

于 2009-03-16T15:35:46.173 に答える
11

私は同じ問題に苦労し、最終的に Web サイトを Web アプリケーションに変換するトリガーを引きました。これを行うと、ビルド アクションなどのすべての IDE の利点が得られ、コンパイルが速くなり、起動するようになりました (Web サイトを検証する必要がなくなりました...)。

ステップ 1: 「Web サイト」を「Web アプリケーション」に変換します。それを変換するために、新しい「Web アプリケーション」を作成し、自動的に作成されたすべてのファイルを吹き飛ばし、Web サイトをコピーして貼り付けました。これはうまくいきました。レポート ファイルでは、ビルド アクションを「none」ではなく「Content」に設定する必要があることに注意してください。

ステップ 2: これで、任意のファイルの「ビルド アクション」プロパティを設定できるようになりました。

お役に立てれば。

于 2011-04-12T14:13:54.563 に答える
5

ここには2つのオプションしかないと思います:

  • 「プロジェクトから除外」機能を使用します。プロジェクト項目が統合 IDE ソース管理操作から除外されるため、これは理想的ではありません。ソリューション エクスプローラーでファイルを表示する必要がある場合は、ソリューション ウィンドウの [すべてのファイルを表示] ボタンをクリックする必要がありますが、関心のないファイルやフォルダーも表示されます。
  • ビルド後のイベント スクリプトを使用して、公開したくないプロジェクト アイテムを削除します (ローカル フォルダーに公開してからサーバーにアップロードすると仮定します)。

私は以前にこれを経験したことがあり、本当にエレガントなものを思いつくことができませんでした.

于 2009-03-16T15:30:57.760 に答える
1

プロジェクトが「Web アプリケーション」として作成されている場合、探している機能が存在します。Webサイトの「プロジェクト」は、Web サーバーに展開されるものと 1 対 1 で考えられるファイルの集まりです。

機能に関してはどちらも同じですが、Web アプリケーションはすべてのソース コードを DLL にコンパイルします。ネイキッド ソース コード ファイルが Web サーバーにコピーされ、必要に応じてコンパイルされるのではありません。

于 2009-03-16T15:28:45.440 に答える
1

これは、ここにある他の役立つ回答への単なる補遺であり、私が便利だと思ったものです...

wpp.targets を使用してファイルとフォルダーを除外する

異なる環境に複数の展開がある場合は、除外されたすべてのファイルとフォルダーを設定できる共通ファイルを 1 つだけ持つと便利です。*.wpp.targetsこれを行うには、以下の例のようにプロジェクトのルートにファイルを作成します。

詳細については、次の Microsoft ガイドを参照してください。

方法: 発行プロファイル (.pubxml) ファイルおよび Visual Studio Web プロジェクトの .wpp.targets ファイルの配置設定を編集する

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <EnableMSDeployAppOffline>True</EnableMSDeployAppOffline>
    <ExcludeFilesFromDeployment>
      *.config;
      *.targets;
      *.default;
    </ExcludeFilesFromDeployment>
    <ExcludeFoldersFromDeployment>
      images;
      videos;
      uploads;
    </ExcludeFoldersFromDeployment>
  </PropertyGroup>
</Project>
于 2019-12-04T23:39:06.783 に答える