gpt4 book ai didi

reference - 缺少 MSBuild Web 部署的二级二进制引用

转载 作者:行者123 更新时间:2023-12-01 06:41:59 26 4
gpt4 key购买 nike

我正在尝试对 Web 应用程序 (.NET 4.0) 进行基于 Jenkins 的自动构建/部署。 Web 应用程序项目有多个项目引用,而这些引用又包含第三方 DLL 的二进制引用。

问题:

  • 二级引用(项目引用的引用)没有拉到obj\<CONFIGURATION>\Package\PackageTmp\bin中的bin文件夹中文件夹,用于构建部署包。
  • 当我在 Visual Studio 中构建时,二级引用被拉入常规构建输出目录。
  • 使用 MSBuild 构建时,不会将二级依赖项拉入常规输出目录,也不会拉入 PackageTmp\bin目录。

  • 这已被 MS 确认为无法修复的问题 here .

    相关问题 here , herehere要么不符合我的问题,要么提供不起作用的解决方案。我已经查看了所有答案,而不仅仅是已接受的答案。

    我的构建命令如下所示(使用 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>

    最佳答案

    假设您已经在解决方案/项目之外的文件夹中收集了运行时所需的所有库,您是否尝试过仅使用构建后事件将所有这些库复制到您的主项目目标目录 (bin),然后将该目录包含在您的部署包中使用赛义德方法:http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx (也可以在这篇文章中找到:How do you include additional files using VS2010 web deployment packages?)?

    我的主要项目的构建后事件中有(除其他外)以下行:

    xcopy "$(ProjectDir)..\..\Libraries\*.dll" "$(TargetDir)" /Y /S

    除此之外,我还在我的 .csproj 文件中添加了以下几行:
    <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
    PostBuildLibraries;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
    </PropertyGroup>
    <Target Name="PostBuildLibraries">
    <ItemGroup>
    <_PostBuildLibraries Include="$(TargetDir)**\*" />
    <FilesForPackagingFromProject Include="%(_PostBuildLibraries.Identity)">
    <DestinationRelativePath>$(OutDir)%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
    </ItemGroup>
    </Target>

    请务必在导入“Microsoft.WebApplication.targets”后添加这些行。查看上面的链接了解更多详情。

    这使得在每次构建后(复制到项目的目标目录)和每次创建部署包(复制到 obj\ \Package\PackageTmp\bin)后,所有所需的库都可​​用。

    此外,由于我正在构建我的主要项目,而不是我的解决方案,我使用的是 $(ProjectDir)宏而不是 $(SolutionDir) .

    关于reference - 缺少 MSBuild Web 部署的二级二进制引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608857/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com