Azure 管道:msbuild 不会在 _PublishedWebsites 中复制一个 DLL

Azure pipeline: msbuild does not copy one DLL in _PublishedWebsites

我的 Azure Pipeline 上的 msbuild 有一个奇怪的行为。 我将 Azure Pipeline 与自托管 Windows 代理一起使用。

配置:

我的 Visual Studio .sln 包含两个 C# 项目:

此外,业务层依赖于另外 2 个项目。

Kernel.DataAcess 层正在使用 NuGet 包“Microsoft.SqlServer.Types”(14.0.314.76)

项目 Kernel.DataAccess 中的引用“Microsoft.SqlServer.Types”具有“Copy Local = True”。因此,应将 DLL 文件复制到输出(发布)目录中。

问题:

当我运行 Azure 构建管道时,文件“Microsoft.SqlServer.Types.dll”复制到“_PublishedWebsites”目录中。

为了说服自己,我决定通过更改代理池在另一台构建机器上 运行 相同 管道。令我惊讶的是,DLL 出现在第二台构建机器上的“_PublishedWebsites”中。

此外,我决定在我的本地计算机上手动 运行 msbuild 命令,并且 DLL 也存在于我本地计算机上的“_PublishedWebsites...\bin”中。

日志文件:

我还查看了构建机器和本地计算机上的日志文件。

Copying file from "C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies\Microsoft.SqlServer.Types.dll" to "F:\AgentLatestBuild\A1\_work\b\_PublishedWebsites\ApiProject\bin\Microsoft.SqlServer.Types.dll".
_CopyFilesMarkedCopyLocal:
Copying file from "C:\TFS\Repos\Src\Project\**packages**\Microsoft.SqlServer.Types.14.0.314.76\lib\net40\Microsoft.SqlServer.Types.dll" to "E:\tfs\build\Microsoft.SqlServer.Types.dll".

Copying file from "E:\tfs\build\Microsoft.SqlServer.Types.dll" to "E:\tfs\build\_PublishedWebsites\ApiProject\bin\Microsoft.SqlServer.Types.dll".

如您所见: 在第二台构建机器上,msbuild not 使用 NuGet packages 文件夹,但它使用“C:\Program Files (x86)\Microsoft SQL Server0\SDK\Assemblies\Microsoft.SqlServer.Types.dll"

在我的本地计算机上,DLL 是从 NuGet packages 文件夹中复制的。

这是我的问题:

msbuild.exe 如何选择 DLL 的 source/location?

有没有办法强制 msbuild 首先使用 NuGet packages 而不是任何其他文件夹?

我认为 msbuild 应该首先查看 NuGet 包文件夹,如果没有找到 DLL,那么它应该尝试从其他地方找到它。 (C:\Program Files (x86)、GAC 等。)

最后,你知道为什么“Microsoft.SqlServer.Types.dll”在第一台构建机器上根本没有被复制吗? DLL 存在于至少三个位置。 (即:NuGet packages 文件夹,C:\Program files\,它也在 GAC 中)。

似乎 msbuild 在依赖项跟踪中丢失了,找不到文件或由于其他原因不会复制它。

感谢您的帮助。

是否有可能您的 *.csproj 定位错误 HintPath

你能检查一下你是否有这样的东西:

    <Reference Include="Microsoft.SqlServer.Types">
      <HintPath>..\packages\Microsoft.SqlServer.Types.YOURVERSION\lib\net40\Microsoft.SqlServer.Types.dll</HintPath>
    </Reference>

谢谢