【发布时间】:2019-01-10 09:19:31
【问题描述】:
我有一个包含多个项目的解决方案。它们是 c/c++、.NET 框架、.NET Standard 和 .NET Core 的混合体。以前它只是 c/c++ 和 .NET 框架,但我们现在已经升级了其中的大部分。
我正在尝试使用 VSTS 修改现有 CI 管道,该管道将构建和发布相关项目,现在它们已转换为 dotnet 核心/标准。
由于项目不兼容,我无法使用 dotnet build 构建此解决方案,因此我改用 Visual Studio 构建任务。效果很好。
在测试方面,我无法使用 Visual Studio 测试任务,因为它失败了。相反,我使用dotnet vstest 并针对已经构建的单元测试项目dll。这不是很好,但它有效。我必须使用--no-build 开关来确保它不会尝试构建项目,因为项目不兼容会导致失败。
对于发布主应用项目,我需要使用dotnet publish。但是,当我这样做时,我会收到类似
error MSB3030: Could not copy the file "xx\bin\release\netstandard2.0\xx.dll" because it was not found. [xx.csproj]
这是因为它找错了地方。这些文件实际上在 xx\bin\x64\release\netstandard2.0 中。我可以使用dotnet publish -c <release|debug> 指定发布/调试配置,但似乎我无法指定路径的平台部分。
为了解决这个问题,我将配置改为 build 为 xx\bin\release\netstandard2.0\。但是,它仍然失败,出现与 xx\obj\ 路径相关的类似错误。
我尝试在项目文件中将 -r 开关与 RuntimeIdentifiers 结合使用,但这似乎与此问题无关。
我还尝试在本地运行这些命令以更快地转身并使用设置,但那里也没有运气。我没有想法。
编辑:
我有一个(相当不满意的)解决方案。如果我编辑所有项目文件以包含下面的文本,那么文件将输出到预期的位置并且发布将起作用:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutputPath>bin\Release</OutputPath>
<IntermediateOutputPath>obj\Release</IntermediateOutputPath>
</PropertyGroup>
我不敢相信我需要这样做。这真的是唯一的答案吗?我可以不将某些内容传递给dotnet publish 以使其在正确的位置查找吗?
【问题讨论】:
-
在 dotnet 发布任务中,如果取消选择
Publish Web Projects并指定项目路径(或**/*.csproj)而不是示例 ibb.co/hzoWLe,会怎样? -
这就是我正在做的事情。我正在运行的完整命令是: dotnet publish
/x.csproj -c release --no-build -
你能通过在VSTS中将
system.debug变量设置为true来分享详细的构建日志吗?