Я пытаюсь создать пакет 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?