代码之家  ›  专栏  ›  技术社区  ›  DevByDefault

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

  •  0
  • DevByDefault  · 技术社区  · 6 年前

    恕我直言。我正在尽可能多地提供信息。

    我将一些类从.NETFramework库移到 新的.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>
    

    对于上面的项目文件,我得到了这个错误。 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">
    

    或者

    <Project DefaultTargets="restore;publish"  Sdk="Microsoft.NET.Sdk">
    

    错误: 一堆错误说明了几乎所有的事情都是未定义的(vbc:类型“System.String”未定义。)注意:传递与msbuild目标相同的命令,如/t:restore、build、publish。


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

    \找不到“obj\project.assets.json”。运行NuGet包还原以生成此文件。


    <Project InitialTargets="restore"  Targets="build,publish"  Sdk="Microsoft.NET.Sdk">
    

    或者

    <Project InitialTargets="restore"  Targets="publish"  Sdk="Microsoft.NET.Sdk">
    

    错误:


    谢谢你的阅读。我真的很感激任何解决这个问题的指导。

    1 回复  |  直到 6 年前
        1
  •  1
  •   DevByDefault    6 年前

    结果发现,我的生成定义指向一个旧版本的MSBuild,它不识别sdk格式。在将其更改为MSBuild15并使用restore、build目标之后,我能够使这些目标正常工作。