web-dev-qa-db-ja.com

Visual StudioでのWebサイト発行からファイルを除外する

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

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

72
Jim Snyder

拡張子に基づいてファイルを識別できる場合は、 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を使用します。

29
Chris Hynes

ExcludeFilesFromDeploymentおよびExcludeFoldersFromDeployment要素をプロジェクトファイル(.csproj、.vbprojなど)に追加して、ファイルとフォルダーを除外します。以下に示すように、適切なPropertyGroup(デバッグ、リリースなど)内の任意の場所に追加します。

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

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

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

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

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

112
Keith

驚いたことに、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サイトプロジェクトではない)でこのとらえどころのない除外機能を探すためにインターネットで長い時間を費やし、以前は不可能だと結論付けていましたが、次のように見えます:

Webアプリケーションプロジェクトの〜/ Properties/PublishProfilesおよびWebサイトの〜/ App_Data/PublishProfilesにある[mypublishwebsitename] .pubxmlファイルに、次を追加するだけです。

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

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

しかし、待って!!!

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

enter image description here

その後、Web公開プロセスは、ソースサーバー/ターゲットサーバーで、<ExcludeFoldersFromDeployment>および<ExcludeFilesFromDeployment>で線引きしたアイテムなど、除外されたものをすべて削除します。

MsDeploy Skip Rules to the rescue:

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

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

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

.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>

そして、filePathの.をバックスラッシュでエスケープすることを忘れないでください。

32
Brian Ogden

私は同じ問題に苦しみ、ついにWebサイトをWebアプリケーションに変換するきっかけになりました。これを行うと、ビルドアクションなどのIDEの利点がすべて得られ、起動時にコンパイルが高速になりました(Webサイトの検証が不要になりました...)。

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

ステップ2:これで、任意のファイルの「ビルドアクション」プロパティを設定できます。

お役に立てれば。

11
BlackjacketMack

Visual Studio 2013では、プロジェクトファイルにExcludeFoldersFromDeployment要素を追加するキースの答えが見つかりませんでした(これを示すブライアンオグデンの答えを読んでいませんでした)。ただし、テキストファイル自体に次のプロパティを設定するだけで、Visual Studio 2013で発行するときにテキストファイルを除外できることがわかりました。

1)ビルドアクション:なし

2)出力ディレクトリにコピー:コピーしないでください

最初は、[出力ディレクトリにコピー]プロパティを単独で設定しようとしましたが、ビルドアクションがデフォルト値のコンテンツに設定されていると機能しませんでした。その後、ビルドアクションを[なし]に設定すると、発行時にテキストファイルがコピー先フォルダーにコピーされなくなりました。

Visual Studio GUIでこれらのプロパティを表示するには、ソリューションエクスプローラーで除外するファイルを右クリックし、コンテキストメニューから[プロパティ]を選択します。

6
Simon Tewsi

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

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

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

5
Kev

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

機能に関しては両方とも同じですが、Webアプリケーションは、裸のソースコードファイルがWebサーバーにコピーされ、必要に応じてコンパイルされるのではなく、すべてのソースコードをDLLにコンパイルします。

1
David

Visual Studio 2017の場合、WebApp Publish、最初に標準のファイルシステム発行プロファイルを作成します。 App_Data\PublishProfiles \フォルダーに移動して、[profilename] .pubxmlファイルを編集します。

追加する

<ExcludeFilesFromDeployment>[file1.ext];[file2.ext];[file(n).ext]</ExcludeFilesFromDeployment>

tag<PropertyGroup>このタグは1回しか指定できません。そうでない場合は、最後のタグの値のみを取ります。

例:

<Project ToolsVersion="4.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>True</ExcludeApp_Data>
    <publishUrl>C:\inetput\mysite</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <ExcludeFilesFromDeployment>web.config;mysite.sln;App_Code\DevClass.cs;</ExcludeFilesFromDeployment>
  </PropertyGroup>
</Project>

タグDeleteExistingFilesがFalseに設定されていることを確認してください

1
Nico Dreyer

Visual Studio 2017(私の場合は15.9.3)では、.csproj-Fileの操作は実際にうまく機能します! pubxmlを変更する必要はありません。

その後、PropertyGroup条件を使用して、.csproj-Fileにかなり素敵な設定を作成できます。

  <PropertyGroup Condition="$(Configuration.StartsWith('Pub_'))">
    <ExcludeFoldersFromDeployment>Samples</ExcludeFoldersFromDeployment>
  </PropertyGroup>

「Pub_」で始まる構成のすべてのデプロイメントから「Samples」フォルダーを除外します...

0
Markus R.

現代的な答えとして、.netコアサイトを持つVisual Studio 2017で:

CopyToPublishDirectoryが決してないcsprojのように、公開から除外できます。

  <ItemGroup>
    <Content Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="appsettings.Local.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </Content>
  </ItemGroup>

これについては、ここで詳しく説明します: https://docs.Microsoft.com/en-us/aspnet/core/Host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2

<PropertyGroup>
    <ExcludeFilesFromDeployment>appsettings.Local.json</ExcludeFilesFromDeployment>
</PropertyGroup>

以前の提案はうまくいきませんでした。VisualStudioは現在、下にある別の公開メカニズムを使用しているため、「dotnet publish」cliツールまたは下にある同等のツールを使用していると思われます。

0
Alex KeySmith