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>