Как загрузить пакет NuGet с собственной dll без ссылки в проекте вместо копирования в выходной каталог

У меня есть проект .NET, использующий собственный .dll с атрибутами [DllImport]. Наши правила проекта запрещают нам хранить какие-либо библиотеки DLL как часть исходного кода. Я создал такой же пакет NuGet, используя файл nuspec. Теперь проблема заключается в том, как использовать пакет, не ссылаясь на него в проекте. Я хотел бы скопировать DLL в выходной каталог вместо ссылки в проекте.

Я попытался добавить в файл конфигурации пакета и попытался восстановить пакеты с помощью команды предварительной сборки и дальнейшего копирования, что не сработало.

Может ли кто-нибудь предложить, как упаковать собственную DLL и использовать ее в проекте, ссылаясь на нее каким-то образом?


person mver19    schedule 23.02.2018    source источник
comment
Пожалуйста, разверните не получилось. В чем была проблема или ошибка? Вы действительно уверены, что если вам не разрешено ссылаться на сторонние библиотеки DLL, вам разрешено использовать их, просто сбросив их в папку bin?!   -  person Stephen Kennedy    schedule 23.02.2018
comment
редактирование файла package.config вручную для восстановления пакетов из самородка пытается установить его в соответствующем проекте, где возникает исключение для недопустимой сборки, поскольку это собственная библиотека, и на нее нельзя ссылаться напрямую. Событие предварительной сборки успешно загружает пакеты, но сборка завершается ошибкой при добавлении в проект.   -  person mver19    schedule 26.02.2018


Ответы (1)


Не очень уверен, о чем вы просите, т.е. вы хотите, чтобы dll находилась в каталоге сборки, но не ссылалась на нее в вашем проекте.

Я думаю, вы можете сделать это с мишенями.

IE: файл Nuget Nuspec: (есть больше обязательных полей, но просто перечислены соответствующие поля)

<?xml version="1.0"?>
<package >
  <metadata>
    <id>NugetName.Core</id>
  </metadata>
  <files>
    <file src="bin\Debug\YourDll.dll" exclude="lib\net452\YourDll.dll" />
    <file src="YourDll.dll" target="build\YourDll.dll" />
    <file src="NugetName.Core.targets" target="build\" />
  </files>
</package>

Создание файла NugetName.Core.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)YourDll.dll">
      <Link>YourDll.dll</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>
person Gaute Odin Alvestad    schedule 23.02.2018
comment
спасибо за ответ, но, к сожалению, это также вызывает ошибку при установке пакета nugget, в котором целевые файлы объединены вместе. Не удалось добавить ссылку на my.dll. Убедитесь, что файл доступен и является допустимой сборкой или COM-компонентом. - person mver19; 26.02.2018
comment
Извините, я лично не пробовал это с файлами dll (в основном использую его с файлами конфигурации). Я предполагаю, что nuspec пытается добавить любой файл dll в качестве ссылки. Мой единственный совет - переименовать расширение (например, My._dll), но тогда вы, вероятно, сможете загрузить dll? - person Gaute Odin Alvestad; 28.02.2018
comment
Также вы можете попробовать обновленный код (исключить в nuspec). Возможно, вам придется отредактировать его, чтобы он соответствовал вашей версии .net. - person Gaute Odin Alvestad; 15.03.2018