在MSBuild中构建混合的.Net标准和.NetFramework解决方案
请原谅这封长信。我试图提供尽可能多的信息 我将一些类从.Net Framework库移动到新的.Net标准库中,以便从现有的.Net Framework项目和新的.Net核心项目中引用它们。将新的.net标准项目添加到包含其他.net Framework项目的解决方案后,现有生成定义(XAML)无法生成.net标准项目。如果我传递/t:restore,build-as-MSBuild参数,它可以正常生成,但这会破坏解决方案中现有.net framework项目的生成。Visual Studio 能够很好地构建混合解决方案。我需要在这个混合解决方案中构建它,因为下游项目负责打包并推送到我们的nuget存储库(OctopusDeploy) 为了克服这个问题,我尝试使用默认目标和初始目标,但无法实现 请参见下面的示例项目:在MSBuild中构建混合的.Net标准和.NetFramework解决方案,msbuild,.net-standard-2.0,Msbuild,.net Standard 2.0,请原谅这封长信。我试图提供尽可能多的信息 我将一些类从.Net Framework库移动到新的.Net标准库中,以便从现有的.Net Framework项目和新的.Net核心项目中引用它们。将新的.net标准项目添加到包含其他.net Framework项目的解决方案后,现有生成定义(XAML)无法生成.net标准项目。如果我传递/t:restore,build-as-MSBuild参数,它可以正常生成,但这会破坏解决方案中现有.net framework项目的生成。Visual Studio
<Project InitialTargets="restore" DefaultTargets="publish" Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Globals">
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<RootNamespace>MyCompany.Common</RootNamespace>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>MyCompany.CommonStandard</AssemblyName>
</PropertyGroup>
</Project>
萨克
萨克
萨克
萨克
我公司。普通
netstandard2.0
我公司通用标准
通过上面的项目文件,我得到了这个错误。
C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets(240):目标依赖关系图中存在涉及目标“\u FilterRestoreGraphProjectInputItems”的循环依赖关系
我尝试过的其他事情:
<Project DefaultTargets="restore;build;publish" Sdk="Microsoft.NET.Sdk">
或
错误:说明几乎所有内容都未定义的一系列错误。(vbc:Type'System.String'未定义。)注意:传递与msbuild目标相同的命令,如/t:restore、build、publish
或
或
恢复
$(BuildDependsOn);
错误:\obj\project.assets.json'未找到。运行NuGet包还原以生成此文件
或
错误:目标依赖关系图中存在涉及目标“\u FilterRestoreGraphProjectInputItems”的循环依赖关系
谢谢你的阅读。我非常感谢您提供解决此问题的指导。事实证明,我的构建定义指向的是一个旧版本的MSBuild,它不识别sdk格式。将其更改为MSBuild15并使用还原、生成目标后,我能够使这些目标正常工作。当您说“现有生成定义无法生成”时,您是什么意思?某个地方出现错误?如果不传入/t:restore,build,.net标准项目将失败,并且未找到“project.assets.json”。请运行NuGet包还原以生成此文件。错误。如果我传入此命令,则会生成.net标准项目,但.net Framework项目会失败,因为“目标”还原“在项目中不存在”
<Project DefaultTargets="restore;publish" Sdk="Microsoft.NET.Sdk">
<Project Targets="restore,build,publish" Sdk="Microsoft.NET.Sdk">
<Project DefaultTargets="publish" Sdk="Microsoft.NET.Sdk">
<Project DefaultTargets="publish" Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<BuildDependsOn>
Restore;
$(BuildDependsOn);
</BuildDependsOn>
</PropertyGroup>
<Project InitialTargets="restore" Targets="build,publish" Sdk="Microsoft.NET.Sdk">
<Project InitialTargets="restore" Targets="publish" Sdk="Microsoft.NET.Sdk">