我正在嘗試做一個基於Jenkins的自動構建/部署的Web應用程序(.NET 4.0)。 Web應用程序項目具有多個項目引用,這些引用又具有二進制引用第三方DLL。MSBuild Web部署缺少二級二進制引用
問題:
- 第二級引用(項目引用的參考文獻)未在
obj\<CONFIGURATION>\Package\PackageTmp\bin
文件夾拖入bin文件夾,用於構建部署包。 - 當我在visual studio中構建時,第二級引用被拉入常規構建輸出目錄。
- 使用MSBuild構建時,二級依賴關係不會被拉入常規輸出目錄,也不會被拉入
PackageTmp\bin
目錄。
這被MS確認爲Won't-Fix問題here。
相關問題here,here和here要麼不符合我的問題,要麼提供的解決方案不起作用。我已經回顧了所有的答案,而不僅僅是接受的答案。
我的生成命令看起來像這樣(使用的MSBuild 4.0):
的MSBuild MySolution.sln/P:配置=積分/ P:平臺= 「任何 CPU」/ T:清潔,構建/ P :DeployOnBuild = TRUE/p:DeployTarget =封裝 /p:AutoParameterizationWebConfigConnectionStrings =假
我試圖手動編輯項目文件參考元素,添加<Private>True</Private>
,沒有成功。
我正在嘗試解決這個已知問題,以便我的第二級依賴關係自動並正確地拉入到Web發佈臨時目錄中。
我當前的嘗試結合了一般方法here(通過在Web項目文件旁邊添加一個MyProject.wpp.targets文件來定製Web發佈管道),並結合了一些用於查找DLL的MSBuild代碼here。到目前爲止,這已經沒有產生任何結果,或者破壞了項目文件。我是新來的自定義MSBuild代碼,並發現它非常神祕。
我的問題:我正在尋找一個更完整的例子,在我的具體情況。我想認爲的目標是介入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>