Автоматическое внедрение файлов props/target не работает для собственного проекта C++
Я использую автоматическое восстановление пакета в NuGet v2.8.50506.491 с Visual Studio 2013.
Я добавил папку сборки в свой пакет с файлом {package ID}.props. Однако файл, по-видимому, не внедряется в vcxproj во время восстановления. Пакет и все его содержимое восстанавливаются правильно, но ни одно из определений не отображается в свойствах vcxproj. Этого можно ожидать, если внедрение свойства происходит в памяти, но сборка завершается неудачно из-за путей, которые четко определены в подпроцессах и не были унаследованы.
Если я добавлю явную ссылку на файл props в мой локальный репозиторий пакетов, проект будет успешно собран, поэтому проблем с путями в файле props не возникает.
Я также попытался добавить реквизиты в "родной" подпапке при сборке, также безрезультатно.
Выписка из nuspec:
<file src="build\MyPackage.targets" target="build\MyPackage.targets" />
Я также попробовал файл цели вместо /, а также файл реквизита, но это тоже не работает.
Я должен добавить, что я определил Nuget.config в папке sln с абсолютным путем к моему репозиторию пакетов:
<config>
<add key="repositoryPath" value="C:\Packages" />
</config>
2 ответа
У меня была эта проблема сегодня, и в конце концов я понял, что имена моих файлов.nuspec и.targets отличались от идентификатора моего пакета, что, очевидно, является проблемой. Переименование файлов.nuspec и.targets в соответствии с идентификатором пакета заставило NuGet начать корректную инъекцию в vcxproj. Я не уверен, какой из двух файлов был проблемой, или если это было оба, но это работает правильно теперь, когда все три имени совпадают.
Инъекция .targets
а также .props
Ссылка на файл происходит только в тот момент, когда вы устанавливаете пакет NuGet. Это то же самое, что и в проектах.NET, где ссылки на сборки создаются только во время установки пакета.
Позже, когда вы создаете проект, механизм восстановления пакета просто загружает и извлекает пакет NuGet, так что ранее "висящие" ссылки.target / .props / assembly становятся действительными ссылками.