Msbuild v15 не может разрешить переменные метаданных файла nuspec

Я знаю, что с момента выпуска msbuild 15 (против 2017 года) NuGet теперь полностью интегрирован в MSBuild.

У меня есть файл nuspec с определением переменных свойств пакета, таких как:

    <metadata>
        <id>$id$</id>
        <version>$version$</version>  
        <authors>$authors$</authors>
    ...
    </metadata> 

Файл nuspec находится в той же папке проекта.

При использовании инструмента nuget для создания пакета, он работает нормально.

    nuget pack   

При использовании msbuild v15 возникает исключение.

запустите команду:

    msbuild -version

Microsoft (R) Build Engine версия 15.8.168+ga8fba1ebd7 для.NET Framework 15.8.168.64424

    msbuild  /t:pack /p:configuration=release    /p:NuspecFile=mylib.nuspec

поднять исключение:

C: \ Program Files \ dotnet \ sdk \ 2.1.402 \ Sdks \ NuGet.Build.Tasks.Pack \ build \ NuGet.Build.Tasks.Pack.targets (199,5): ошибка: значение не может быть пустым или пустым строка.

Странно, что dotnet SDK версии 2.1.402 вызывает исключение.

Я попытался установить msbuild с vs 2017 с его путем, и это вызывает то же исключение.

Когда я подставляю переменные с их значениями, msbuild работает нормально.

Вопрос

Это ошибка в версии 15.8.168.64424 или я что-то пропустил?

Другими словами, может ли msbuild поддерживать использование переменных метаданных пакета?

1 ответ

Решение

Как уже упоминалось в комментариях, вам больше не нужен файл Nuspec, так как большинством аспектов можно управлять с помощью свойств в файле csproj или дополнительных метаданных по элементам (например, если вам требуется дополнительный контент).

Если по какой-то причине вам нужен файл nuspec, вам нужно предоставить переменные для подстановки самостоятельно. Вы можете сделать это в цели внутри файла csproj следующим образом:

<Target Name="SetNuspecProperties" BeforeTargets="GenerateNuspec">
  <PropertyGroup>
    <NuspecProperties>$(NuspecProperties);id=$(AssemblyName)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);config=$(Configuration)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);version=$(PackageVersion)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);description=$(Description)</NuspecProperties>
    <NuspecProperties>$(NuspecProperties);authors=$(Authors)</NuspecProperties>
  </PropertyGroup>
</Target>
Другие вопросы по тегам