在MSBuild中构建混合的.Net标准和.NetFramework解决方案

在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

请原谅这封长信。我试图提供尽可能多的信息

我将一些类从.Net Framework库移动到新的.Net标准库中,以便从现有的.Net Framework项目和新的.Net核心项目中引用它们。将新的.net标准项目添加到包含其他.net Framework项目的解决方案后,现有生成定义(XAML)无法生成.net标准项目。如果我传递/t:restore,build-as-MSBuild参数,它可以正常生成,但这会破坏解决方案中现有.net framework项目的生成。Visual Studio 能够很好地构建混合解决方案。我需要在这个混合解决方案中构建它,因为下游项目负责打包并推送到我们的nuget存储库(OctopusDeploy)

为了克服这个问题,我尝试使用默认目标和初始目标,但无法实现

请参见下面的示例项目:

    <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">