Решение msbuild VS2017 с библиотекой netstandard в нем

Я создал решение VS2017, содержащее одну библиотеку примеров, нацеленную на .NETStandard 1.4.

К этому я добавил один класс:

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

Из визуальной студии он компилируется нормально, но если вы очистите каталоги bin и obj, а затем выполните сборку из msbuild, используя: msbuild ExampleNetstandard.sln / t: Build / p: Configuration = Release / p: Platform = "Any CPU"

Я получаю следующую ошибку:

C: \ Users \ Aaron \ AppData \ Local \ Temp.NETStandard, Version = v1.4.AssemblyAttributes.cs (4,20): ошибка CS0400: тип или имя пространства имен «Система» не может быть найдено в глобальном пространстве имен (вам не хватает ссылки на сборку?) [D: \ src \ Example Netstandard \ ExampleNetstandard.csproj] obj \ Release \ netstandard1.4 \ ExampleNetstandard.AssemblyInfo.cs (6,12): ошибка CS0246: имя типа или пространства имен ' System 'не удалось найти (вам не хватает директивы using или ссылки на сборку?) [D: \ src \ ExampleNetstandard \ ExampleNets tandard.csproj]

Есть ли что-то конкретное, что мне нужно сделать, чтобы получить такой проект для сборки из msbuild? Я исследую это, поскольку наш сервер TeamCity выдает эту ошибку в реальном проекте.


person Aaron0    schedule 04.04.2017    source источник
comment
Не могли бы вы также опубликовать файл csproj? Это должно быть довольно коротко. Кроме того, используется ли dotnet restore, за которым следует dotnet build ExampleNetstandard.sln -c Release? Если да, то будет ли это подходящим изменением для вашего сервера TeamCity?   -  person Jon Skeet    schedule 04.04.2017
comment
Спасибо за помощь. Восстановление dotnet вместо восстановления nuget решило проблемы. Да, мой csproj был довольно простым: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard1.4</TargetFramework> </PropertyGroup> </Project>   -  person Aaron0    schedule 04.04.2017


Ответы (1)


Если вы удалите каталоги bin и obj, вам нужно будет снова восстановить свои пакеты. Когда вы запускаете dotnet restore, внутри вашего каталога obj генерируются файлы, которые вам нужны для компиляции. Также вы должны придерживаться dotnet cli для основных проектов dotnet. Поскольку dotnet cli поставляется с соответствующими версиями msbuild для ядра.

Вы можете восстановить свои пакеты, запустив dotnet restore, а затем dotnet build -c Release, чтобы скомпилировать приложение. Каждый раз, когда вы очищаете каталог obj, вы должны запускать dotnet restore

person TerribleDev    schedule 04.04.2017
comment
Спасибо, куча, вот и трюк. Я заменил шаг установщика TeamCity Nuget на dotnet restore, и теперь все работает нормально. - person Aaron0; 04.04.2017
comment
где мне запустить восстановление dotnet в vs 2017 ?? - person Prasaanth Neelakandan; 13.05.2017
comment
@PrasaanthNeelakandan Я просто запускаю его из командной строки, я не использую визуальную студию, поэтому не могу вам сказать. - person TerribleDev; 24.07.2017