我有一个包含多个项目的解决方案。它们是c / c ++ 、. NET框架,.NET Standard和.NET Core的组合。以前只是c / c ++和.NET框架,但我们现在已经升级了其中的大多数。
我正在尝试使用VSTS修改现有的CI管道,该管道将构建并发布相关项目,因为它们已转换为dotnet core / standard。
由于项目不兼容,我无法使用dotnet build
来构建此解决方案,因此我改用Visual Studio Build任务。很好。
在测试方面,我无法使用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>
指定发布/调试配置,但似乎无法指定路径的平台部分。
为解决此问题,我将配置更改为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
以便使其在正确的位置显示吗?
答案 0 :(得分:1)
我相信dotnet publish
只是通过MSBuild
目标调用Publish
。因此,您应该只可以通过/p:Platform=x64
which is the syntax to specify the platform for MSBuild。