92

現在、Visual Studio 2010の「公開」およびMSDeploy機能を使用してWeb展開のニーズを処理しようとしていますが、ビルド構成に応じてパッケージをカスタマイズする際に障害が発生しました。

32ビット環境で開発していますが、64ビット環境用のリリースパッケージを作成する必要があるため、「リリース」構成で、サードパーティのdllの64ビットバージョンをbinディレクトリにコピーして32ビットバージョンを上書きするビルド後のイベントがあります。 。「公開」機能を使用すると、正しい64ビットdllがbinディレクトリにコピーされていても、パッケージに含まれていません。

ビルド後のイベント中にbinディレクトリにコピーされたファイルを「公開」に含める方法はありますか?

4

6 に答える 6

94

VS2010 Web展開パッケージを使用して追加のファイルをどのように含めるかで、同様の異なる質問に回答しました。。

ビルド後のイベントを使用しているシナリオでは、ビルド後のイベントを削除し、ビルド後のイベントではなく、独自のMSBuildターゲットを使用してアクションを実装することをお勧めします。以下に他の回答のテキストがあります。


差出人:VS2010 Web展開パッケージを使用して追加のファイルをどのように含めますか?


素晴らしい質問です。これに関する非常に詳細なブログエントリをWebDeploymentTool(MSDeploy)に投稿しました:追加のファイルを含む、または特定のファイルを除外するパッケージをビルドします

概要は次のとおりです。ファイルを含めた後、ファイルを除外する方法も示します。

余分なファイルを含む

パッケージに余分なファイルを含めるのは少し難しいですが、MSBuildに慣れている場合、そしてこれを読んでいない場合は、それでも大したことはありません。これを行うには、パッケージ化のためにファイルを収集するプロセスの一部にフックする必要があります。拡張する必要のあるターゲットはと呼ばれCopyAllFilesToSingleFolderます。このターゲットには依存関係プロパティがありPipelinePreDeployCopyAllFilesToOneFolderDependsOn、これを利用して独自のターゲットを挿入できます。そこで、という名前のターゲットを作成し、CustomCollectFilesそれをプロセスに注入します。これは、次の方法で実現します(importステートメントの後で覚えておいてください)。

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>

これにより、ターゲットがプロセスに追加されます。次に、ターゲット自体を定義する必要があります。Webプロジェクトの1レベル上にあるExtraFilesという名前のフォルダーがあると仮定します。これらのファイルをすべて含める必要があります。これがCustomCollectFiles目標であり、その後議論します。

<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\Extra Files\**\*" />

    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

ここで私が行ったことは、アイテム_CustomFilesを作成し、Include属性で、そのフォルダーとその下のフォルダー内のすべてのファイルを取得するように指示したことです。次に、このアイテムを使用してアイテムにデータを入力しFilesForPackagingFromProjectます。これは、MSDeployが実際にファイルを追加するために使用するアイテムです。DestinationRelativePathまた、メタデータ値を宣言したことにも注意してください。これにより、パッケージに配置される相対パスが決まります。ここではExtraステートメントを使用しFiles%(RecursiveDir)%(Filename)%(Extension)ました。つまり、ExtraFilesフォルダーの下にあるのと同じパッケージ内の相対的な場所に配置するということです。

ファイルを除外する

VS 2010で作成されたWebアプリケーションのプロジェクトファイルをその下部に開くと、の行が表示されます。

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

ところで、VS内でプロジェクトファイルを開くことができます。プロジェクトを右クリックして、[プロジェクトのアンロード]を選択します。次に、アンロードされたプロジェクトを右クリックして、[プロジェクトの編集]を選択します。

このステートメントには、必要なすべてのターゲットとタスクが含まれます。後かどうかわからない場合は、ほとんどのカスタマイズはインポート後に行う必要があります。したがって、除外するファイルがある場合は、除外するExcludeFromPackageFilesために使用できるアイテム名、があります。たとえば、Webアプリケーションに含まれているSample.Debug.jsという名前のファイルがあり、そのファイルを作成されたパッケージから除外したいとします。そのインポートステートメントの後に、以下のスニペットを配置できます。

<ItemGroup>
  <ExcludeFromPackageFiles Include="Sample.Debug.xml">
    <FromTarget>Project</FromTarget>
  </ExcludeFromPackageFiles>
</ItemGroup>

このアイテムの入力を宣言すると、ファイルは自動的に除外されます。FromTargetここでメタデータの使用法に注意してください。ここでは詳しく説明しませんが、常に指定することを知っておく必要があります。

于 2010-06-30T00:31:47.997 に答える
13

ExcludeFilesFromDeploymentプロジェクトファイル内の要素を使用して、問題の回避策を見つけました。Web配置からアイデアを得ました:ファイルとフォルダーを除外する

したがって、ビルドと関連するビルド後の手順が成功した後、プロジェクトディレクトリに存在するプロジェクトファイルをパッケージ化する必要がある場合は、次の手順を実行します。

  1. 「Package/PublishWeb」プロジェクト設定を編集し、「
    展開するアイテム」を選択して「このプロジェクトフォルダー内のすべてのファイル」にします。
  2. プロジェクトをアンロードします
  3. アンロードされたプロジェクトを右クリックし、プロジェクト構成の編集を選択します
  4. PropertyGroup「リリース」などの構成設定に関連付けられている要素を見つけます
  5. 要素内PropertyGroupに次の要素を追加し、パッケージに不要なファイルとフォルダーを除外します

    <ExcludeFilesFromDeployment>*.cs;**\.svn\**\*.*;Web.*.config;*.csproj*</ExcludeFilesFromDeployment>
    <ExcludeFoldersFromDeployment>.svn;Controllers;BootstrapperTasks;Properties</ExcludeFoldersFromDeployment>
    
  6. プロジェクトを保存してリロードします

これで当面は問題は解決しますが、ハッカーが関係しているため理想的ではないため、より良い解決策がある場合はお知らせください。しかし、これも珍しい展開シナリオですか?

于 2010-06-29T11:53:53.447 に答える
8

ファイルまたはフォルダを選択し、プロパティウィンドウからビルドアクションをコンテンツとして変更します。

于 2014-01-29T12:45:57.663 に答える
3

私はそれが古い質問であることを知っていますが、これらのどれも私のために働きませんでした。

2017 VSでは、公開する追加のフォルダーを右クリックして、[公開]を選択しました。

例:

ここに画像の説明を入力してください

于 2018-04-22T15:37:04.470 に答える
0

binフォルダー(およびその内容)をプロジェクトに追加すると、ファイルが公開出力ディレクトリーにコピーされました。

私にとっての問題は、独自のソフトウェアライセンスファイルをbin /フォルダーに配置する必要がありましたが、展開ごとに手動でコピーしたくないということでした。

これはVisualStudio2015Professionalを使用していました

于 2017-03-16T22:03:11.563 に答える
0

これは古い会話だと知っていますが、同じことをしようとしているときに出くわしたので、ここで見つけたものを追加すると便利だと思いました。

パブリケーションに追加のファイルを含めることに関するほぼすべての記事は、CopyAllFilesToSingleFolderForPackageDependsOnまたはCopyAllFilesToSingleFolderForMSDeployDependsOnアイテムをに追加するこの方法を使用してPropertyGroupおり、「これをファイルの最後に追加しました...」のようにすべて同じです。

PropertyGroupこれは私がしたことであり、ファイルの先頭にすでにセクションがあることに気付くまで、何も起こらなかった理由を見つけるために午後を過ごしました。私CopyAllFilesToSingleFolderForPackageDependsOnがそのセクションに入れたとき、それはうまくいきました。

これがいつか誰かの時間を節約することを願っています

于 2018-09-25T08:37:29.757 に答える