[解決済み] Visual Studio の 'Publish' 機能でビルド後のイベントからファイルをインクルードするには?
質問
現在、Visual Studio 2010 の 'Publish' と MSDeploy 機能を使用して Web 展開のニーズを処理しようとしていますが、ビルド構成に応じてパッケージをカスタマイズすることに関して障害に遭遇しています。
私は 32 ビット環境で開発していますが、64 ビット環境用のリリース パッケージを作成する必要があるため、「リリース」構成で、サード パーティ製 dll の 64 ビット バージョンを bin ディレクトリにコピーし、32 ビット バージョンを上書きするポスト ビルド イベントを用意しています。 Publish」機能を使用すると、正しい 64bit dll が bin ディレクトリにコピーされるにもかかわらず、パッケージに含まれません。
ビルド後のイベントで、bin ディレクトリにコピーされたファイルを 'Publish' で含めるようにする方法はありますか?
どのように解決するのですか?
で似たような、でも違う質問に答えました。 VS2010 Web 展開パッケージを使用して追加ファイルをインクルードする方法は? .
あなたのシナリオでは、ポスト ビルド イベントを使用していますが、ポスト ビルド イベントをやめて、ポスト ビルド イベントの代わりに、独自の MSBuild ターゲットを使用してアクションを実装することをお勧めします。以下に、他の回答のテキストを掲載します。
からです。 VS2010 Web 展開パッケージを使用して、追加ファイルをどのようにインクルードしますか。
素晴らしい質問ですね。私はこれに関して非常に詳細なブログ エントリを次のサイトに投稿しました。 Web Deployment Tool (MSDeploy) : 余分なファイルを含む、または特定のファイルを含まないパッケージの構築 .
以下は、その概要です。ファイルを含めた後、同様にファイルを除外する方法を紹介します。
追加ファイルをインクルードする
パッケージに追加ファイルを含めるのは少し難しいですが、MSBuildに慣れている人なら大したことはありません。 これを行うには、パッケージング用のファイルを収集するプロセスの一部にフックする必要があります。拡張する必要のあるターゲットは
CopyAllFilesToSingleFolder
. このターゲットは依存関係プロパティを持っています。
PipelinePreDeployCopyAllFilesToOneFolderDependsOn
という依存プロパティがあり、これを利用して独自のターゲットを注入することができます。そこで
CustomCollectFiles
という名前のターゲットを作成し、それをプロセスに注入します。これを実現するには次のようにします (import文の後を覚えておいてください)。
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
これでターゲットがプロセスに追加されましたが、次にターゲット自体を定義する必要があります。Webプロジェクトの1つ上の階層にExtra Filesというフォルダがあると仮定します。これらのファイルをすべてインクルードしたいとします。ここでは
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)
という文があります。これは、Extra Filesフォルダの下にあるのと同じ、パッケージ内の相対的な場所に配置することを意味しています。
除外するファイル
VS 2010で作成されたWebアプリケーションのプロジェクトファイルを開くと、その一番下の方に
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
ちなみに、プロジェクトファイルはVSの中で開くことができます。プロジェクト上で右クリックし、Unload Projectを選択します。次に、アンロードされたプロジェクト上で右クリックし、プロジェクトの編集を選択します。
このステートメントには、必要なすべてのターゲットとタスクが含まれています。カスタマイズのほとんどは、インポートの後に行う必要があります。もし、除外するファイルがある場合は、項目名があります。
ExcludeFromPackageFiles
という項目があり、これを使うことで除外することができます。例えば、Webアプリケーションに含まれるSample.Debug.jsというファイルがあるとして、そのファイルを作成するパッケージから除外したいとします。この場合、import文の後に以下のスニペットを記述します。
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
この項目に入力することを宣言することで、自動的にファイルが除外されます。また
FromTarget
メタデータの使い方に注意してください。ここでは触れませんが、常にこれを指定するようにしましょう。
関連
-
ネットのメモリ管理に関する5つの基本
-
[解決済み] crossdomain.xmlファイルとは何ですか?
-
[解決済み] デバッグビルドのみVisual Studioのポストビルドイベントを実行する方法
-
[解決済み] IntelliJからjarを正しくビルドする方法は?
-
[解決済み】ASP.NETのWebサイト全体のブラウザキャッシュを無効にする
-
[解決済み】Visual Studio 2012 Web Publishでファイルがコピーされない。
-
[解決済み] イベントログへの書き込み時にSystem.Security.SecurityExceptionが発生する。
-
[解決済み] フォーム認証のタイムアウトとsessionStateのタイムアウトの比較
-
[解決済み] Visual Studioです。フォルダ構造をコピーせずに「出力先ディレクトリにコピー」する方法は?
-
[解決済み] VS2010 Web 展開パッケージを使用して、追加ファイルをインクルードする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonでpillowをインストールする3つの方法
-
NET6新機能 - 暗黙の名前空間参照
-
ASP.NET CoreでURLを設定する5つの方法
-
ASP.NET CoreでCAPの取引詳細を自動で有効にする
-
swagger uiをasp.net coreに統合する原理
-
ASP.NETでWeb.configからログインする際の正しいアカウントパスワードを確認する
-
ConfigurationManagerのGetSection()メソッドです。
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] フォーム認証のタイムアウトとsessionStateのタイムアウトの比較
-
[解決済み] VS2010 Web 展開パッケージを使用して、追加ファイルをインクルードする方法は?