Чтение свойств реестра MSBuild из файла целей NuGet в .NET Core CLI - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь создать пакет NuGet для перераспределения компонента, который использует как управляемые, так и неуправляемые зависимости (my.dll и mydotnetcore.dll). Чтобы скопировать дополнительный (неуправляемый) файл из локальной установки в выходной каталог, мы используем целевой файл. Мы читаем раздел реестра, чтобы найти локальную установку:

my.targets file:

<PropertyGroup>
  <InstDir>$(registry:HKEY_CURRENT_USER\SOFTWARE\myapp@LocalDir)</InstDir>
</PropertyGroup

Затем локальный файл копируется следующим образом:

<None Include="$(InstDir)\my.dll">
  <Visible>False</Visible>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>

файл my.nuspec:

…
<files>
  <file src="..\mydotnetcore.dll" target="lib\NetCoreApp30\mydotnetcore.dll"/>
  <file src="build\my.targets" target="build\my.targets"/>                       
</files>

Если я добавлю этот пакет NuGet в приложение .NET Core 3 (VS 2019) и соберу его в VS IDE,приложение собрано, и обе DLL скопированы в выходной каталог - все хорошо.

Однако при сборке с использованием инструмента командной строки .NET Core, например, так:

dotnet build

неуправляемая зависимость не скопирована. Я обнаружил, что в этом случае свойство InstDir

<InstDir>$(registry:HKEY_CURRENT_USER\SOFTWARE\myapp@LocalDir)</InstDir>

кажется пустым. Мониторинг процесса с помощью Sysinternals Process Monitor показывает, что реестр не доступен. Видимо, запись игнорируется. Если для свойства введен абсолютный путь, dll также будет скопирована очень хорошо.

Я также пытался запустить его с помощью функции свойства ([MSBuild]::GetRegistryValue), но получил тот же результат. Как я могу прочитать реестр из целевого файла при использовании .NET Core CLI?

...