Webアプリケーション(.NET 4.0)のJenkinsベースの自動ビルド/デプロイメントを実行しようとしています。 Webアプリケーションプロジェクトには、複数のプロジェクト参照があり、順番にバイナリ参照サードパーティDLLを参照します。MSBuild Webデプロイメントで第2レベルのバイナリリファレンスが見つからない
問題:
- セカンドレベルの参照(プロジェクト参照の参照は)展開パッケージを構築するために使用
obj\<CONFIGURATION>\Package\PackageTmp\bin
フォルダにbinフォルダに引き込まれていません。 - ビジュアルスタジオでビルドすると、2番目のレベルの参照が通常のビルド出力ディレクトリに引き込まれます。
- MSBuildを使用して構築する場合、2番目のレベルの依存関係は、通常の出力ディレクトリまたは
PackageTmp\bin
ディレクトリには引き込まれません。
これは、MSによってWon't-Fixの問題hereとして確認されています。
関連する質問here、hereおよびhereは、私の問題と一致しないか、動作しないソリューションを提供しています。私は受け入れられたものだけでなく、すべての答えを見直しました。
私のビルドコマンドは、この(のMSBuild 4.0を使用して)次のようになります。/ Pを構築し、クリーン:
MSBuildのMySolution.sln/P:設定=統合/ P:プラットフォーム= "どれ CPU" /トン:DeployOnBuild = TRUE/P:DeployTarget =パッケージ /P:私は手動でプロジェクトファイル内の参照要素を編集しようとした
AutoParameterizationWebConfigConnectionStrings = falseの場合、成功しません、<Private>True</Private>
を追加します。
私はこの既知の問題を回避しようとしています。そのため、第2レベルの依存関係が自動的にWeb公開の一時ディレクトリにプルされます。
私の現在の試みは、DLLをhereを見つけるためのいくつかのMSBuildのコードと組み合わせて、(MyProject.wpp.targetsは、次のWebプロジェクトファイルへのファイル追加することにより、Webパブリッシングパイプラインをカスタマイズする)は、一般的なアプローチhereを兼ね備えています。これまでのところ、結果は生成されなかったか、プロジェクトファイルが壊れていました。私はMSBuildのカスタムコードを初めて習得し、それをかなりわかりやすく見つけます。
私の質問:私は、私の特定のケースで動作するより完全な例を探しています。 I 目的は、パッケージtempディレクトリにコピーするためのファイルを収集し、それに第2レベルの依存関係を追加するWeb公開パイプラインに介入することです。
マイカスタムMyWebProj.wpp.targetsは次のようになります。あなたはあなたのソリューション/プロジェクト外のフォルダ内の実行時に必要なすべてのライブラリを収集していると仮定すると、
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<BRPathFiles Include="$(SolutionDir)..\Common\**\*.dll;$(SolutionDir)**\*.dll" />
<ConfigPathFiles Include="$(SolutionDir)..\Common\**\*.config;$(SolutionDir)**\*.config" />
</ItemGroup>
<Target Name="CopySecondLevelDependencies" BeforeTargets="CopyAllFilesToSingleFolderForPackage">
<RemoveDuplicates Inputs="@(BRPathFiles->'%(RootDir)%(Directory)')">
<Output TaskParameter="Filtered" ItemName="BRPaths" />
</RemoveDuplicates>
<RemoveDuplicates Inputs="@(ConfigPathFiles->'%(RootDir)%(Directory)')">
<Output TaskParameter="Filtered" ItemName="ConfigPaths" />
</RemoveDuplicates>
<CreateItem Include="%(BRPaths.Identity);%(ConfigPaths.Identity);">
<Output ItemName="FileList" TaskParameter="Include"/>
</CreateItem>
<CreateItem Value="@(BRSearchPath);$(ConfigSearchPath)">
<Output TaskParameter="Value" PropertyName="SecondLevelFiles" />
</CreateItem>
</Target>
<ItemGroup>
<FilesForPackagingFromProject
Include="%(SecondLevelFiles->'$(OutDir)%(FileName)%(Extension)')">
<DestinationRelativePath>$(_PackageTempDir)\bin\%(FileName)%(Extension) </DestinationRelativePath>
<FromTarget>CopySecondLevelDependencies</FromTarget>
<Category>Run</Category>
</FilesForPackagingFromProject>
</ItemGroup>
</Project>