Справочная спецификация NuGet со сборкой не во вложенной папке lib

У меня есть довольно сложный и большой проект, который я хочу попытаться упаковать как пакет nuget для внутреннего использования. Я хочу избежать копирования файлов, потому что их довольно много (150 МБ+ двоичных файлов). Вместо этого я пытаюсь указать файл схемы пакета на файлы, используя элемент <file ...>. Вот упрощенная версия файла, с которой я могу воспроизвести свою проблему:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>AgentCore</id>
    <version>6.1.0</version>
    <authors>kkm</authors>
    <description>AgentCore</description>
    <references>
      <reference file="Utils.dll" />
    </references>
  </metadata>
  <files>
    <file src="Kigo\bin\Release\Utils.dll" target="/lib/net40"/>
  </files>
</package>

Что бы я ни пытался, я получаю сообщение об ошибке:

Недопустимая ссылка на сборку «utils.dll». Убедитесь, что файл с именем «utils.dll» существует в каталоге lib.

Я попробовал предложения из этого ответа, но безрезультатно.

Можно ли избежать физического размещения каталога, как описано в документация NuGet и вместо этого использовать ссылки на файлы?


person kkm    schedule 13.01.2015    source источник


Ответы (1)


Проблема была в каталоге target= элемента <file ...>. Он не должен содержать ведущего /, т.е. е. должен содержать относительный путь. Начальная косая черта не меняет макет пакета, но, по-видимому, сбивает с толку эталонное оценочное устройство в NuGet. Правильная строка в приведенной выше спецификации должна быть

    <file src="Kigo\bin\Release\Utils.dll" target="lib/net40"/>

Подстановочные знаки также работают (и это было моим первоначальным намерением):

    <file src="Kigo\bin\Release\*.*" target="lib/net40"/>

Со спецификацией подстановочных знаков <reference=...> правильно принимает любой двоичный файл, упакованный посредством расширения подстановочных знаков.

person kkm    schedule 13.01.2015