使用MSBuild构建带有NetStandard库的VS2017解决方案

5

我创建了一个 VS2017 解决方案,其中包含一个针对 .NETStandard 1.4 的单个 Example 库。

我添加了一个单独的类:

using System;
namespace ExampleNetstandard
{
    public class Example
    {
        public string A { get; set; }
    }
}

从Visual Studio编译没有问题,但是如果你清空bin和obj目录,然后使用msbuild构建,会出现以下错误:
C:\Users\Aaron\AppData\Local\Temp.NETStandard,Version=v1.4.AssemblyAttributes.cs(4,20): error CS0400: 找不到类型或命名空间名称'System',在全局命名空间中(是否缺少程序集引用?) [D:\src\Example Netstandard\ExampleNetstandard.csproj] obj\Release\netstandard1.4\ExampleNetstandard.AssemblyInfo.cs(6,12): error CS0246: 找不到类型或命名空间名称'System',(是否缺少 using 指令或程序集引用?) [D:\src\ExampleNetstandard\ExampleNets tandard.csproj]
我需要了解是否有特定的步骤可以让这种类型的项目从msbuild构建成功。我正在调查这个问题,因为我们的TeamCity服务器在真实项目上遇到了这个错误。

你能把 csproj 文件也贴出来吗?应该会很短。另外,使用 dotnet restore 然后再使用 dotnet build ExampleNetstandard.sln -c Release 进行构建可以吗?如果可以,那么在你的 TeamCity 服务器上进行这样的更改是否合适? - Jon Skeet
感谢您的帮助。使用dotnet restore而不是nuget restore解决了问题。是的,我的csproj非常简单:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard1.4</TargetFramework> </PropertyGroup> </Project> - Aaron0
1个回答

6
如果删除了您的bin和obj目录,您需要再次恢复您的包。当您运行dotnet restore时,会在您的obj目录内发出一些编译所需的文件。此外,对于dotnet core项目,应该坚持使用dotnet cli。因为dotnet cli附带了适用于core的正确版本的msbuild。

您可以通过运行dotnet restore来恢复您的包,并运行dotnet build -c Release来编译您的应用程序。每当您清理obj目录时,都必须运行dotnet restore


1
非常感谢,问题已经解决。我用 dotnet restore 替换了 TeamCity 的 "Nuget Installer" 步骤,现在一切都构建得很好。 - Aaron0
在 VS 2017 中,我应该在哪里运行 dotnet restore? - Ace McCloud
@PrasaanthNeelakandan 我只是从命令行运行它,我不使用Visual Studio,所以我不能告诉你。 - TerribleDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接