【发布时间】:2012-03-07 20:52:03
【问题描述】:
我正在尝试对 Web 应用程序 (.NET 4.0) 进行基于 Jenkins 的自动构建/部署。 Web 应用程序项目有几个项目引用,而这些引用又具有二进制引用第三方 DLL。
问题:
- 二级引用(项目引用的引用)未拉入
obj\<CONFIGURATION>\Package\PackageTmp\bin文件夹下的bin文件夹,用于构建部署包。 - 当我在 Visual Studio 中构建时,二级引用被拉到常规构建输出目录中。
- 使用 MSBuild 构建时,不会将二级依赖项拉入常规输出目录,也不会拉入
PackageTmp\bin目录。
MS 确认这是一个无法修复的问题here。
相关问题here、here 和here 与我的问题不符,或者提供的解决方案不起作用。我已经查看了所有答案,而不仅仅是接受的答案。
我的构建命令如下所示(使用 MSBuild 4.0):
MSBuild MySolution.sln /p:Configuration=Integration /p:platform="Any CPU" /t:Clean,Build /p:DeployOnBuild=true /p:DeployTarget=Package /p:AutoParameterizationWebConfigConnectionStrings=false
我尝试手动编辑项目文件中的引用元素,添加<Private>True</Private>,但没有成功。
我正在尝试解决这个已知问题,以便将我的二级依赖项自动正确地拉入 Web 发布临时目录。
我目前的尝试结合了通用方法here(通过在 Web 项目文件旁边添加 MyProject.wpp.targets 文件来自定义 Web 发布管道),并结合了一些用于查找 DLL 的 MSBuild 代码here。到目前为止,这要么没有产生任何结果,要么破坏了项目文件。我是自定义 MSBuild 代码的新手,发现它非常神秘。
我的问题:我正在寻找一个更完整的示例,适用于我的具体情况。我认为的目标是干预网络发布管道,该管道收集文件以复制到包临时目录,并向其中添加二级依赖项。
我的自定义 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>
【问题讨论】:
标签: reference msbuild web-deployment