Azure 管道:msbuild 不会在 _PublishedWebsites 中复制一个 DLL
Azure pipeline: msbuild does not copy one DLL in _PublishedWebsites
我的 Azure Pipeline 上的 msbuild 有一个奇怪的行为。
我将 Azure Pipeline 与自托管 Windows 代理一起使用。
配置:
我的 Visual Studio .sln 包含两个 C# 项目:
- 网络服务(休息API)
- 业务层
此外,业务层依赖于另外 2 个项目。
- Kernel.DataModel
- Kernel.DataAccess
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”中。
日志文件:
我还查看了构建机器和本地计算机上的日志文件。
先建机->DLL文件根本就没有复制!
第二台构建机器 -> DLL 文件是从此位置复制的。
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>
谢谢
我的 Azure Pipeline 上的 msbuild 有一个奇怪的行为。 我将 Azure Pipeline 与自托管 Windows 代理一起使用。
配置:
我的 Visual Studio .sln 包含两个 C# 项目:
- 网络服务(休息API)
- 业务层
此外,业务层依赖于另外 2 个项目。
- Kernel.DataModel
- Kernel.DataAccess
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”中。
日志文件:
我还查看了构建机器和本地计算机上的日志文件。
先建机->DLL文件根本就没有复制!
第二台构建机器 -> DLL 文件是从此位置复制的。
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>
谢谢