nuspec contentFiles не добавлены в проект

У меня есть веб-проект (mvc5) с project.json внутри.

Кроме того, у меня есть пакет nuget. Внутри этого пакета (помимо ссылки на dll) у меня есть несколько файлов содержимого (файлы cshtml, css, javascript и т. д.).

Есть 2 цели для достижения:

  • После установки пакета в проект я хочу, чтобы файлы содержимого были включены в проект.
  • После создания проекта я хочу, чтобы nuget восстановил файлы содержимого.

Файл nuspec:

<?xml version="1.0"?>
    <package>
      <metadata>
        /.../

        <dependencies>
            <group targetFramework="net461">
              /.../

           </group>
        </dependencies>
          <contentFiles>
        <files include="**/*.*" flatten="false" copyToOutput="false" buildAction="Content" /> 
      </contentFiles>
      </metadata>
      <files>
         /.../
    <file src="..\src\Content\**\*.*" target="contentFiles\any\any\Content" /> 
    <file src="..\src\Views\**\*.*" target="contentFiles\any\any\Views" /> 
      </files>
    </package>

Что ж, Visual Studio без проблем добавляет пакет nuget. Ссылка также включена. Но контента всегда не хватает. Файлы содержимого не копируются из папки /packages/ и не включаются в проект. То же самое, когда я собираю проект - он просто копирует dll и вообще не трогает файлы содержимого из пакета.

Это работает, только если у меня есть copyToOutput="true", но, конечно, весь контент попадает в папку bin.

Причина, по которой мне нужно восстановить файлы содержимого, заключается в том, что файлы из пакета nuget игнорируются файлом игнорирования tfs (.tfignore). Я не хочу, чтобы эти файлы содержимого были частью веб-проекта в TFS. Однако, конечно, сервер сборки TFS не может собрать проект, потому что отсутствуют некоторые файлы содержимого (файлы из пакета). Поэтому я хочу, чтобы nuget на сервере сборки восстанавливал файлы содержимого до того, как он начнет собирать статистику проекта.

Любая идея, как получить эту работу, если это возможно? Или, может быть, это невозможно, и у меня должны быть файлы контента для включения в проект?


person DolceVita    schedule 28.08.2017    source источник


Ответы (2)


вы можете добавить цель msbuild в свой пакет. в этой цели вы можете выполнить команду восстановления nuget...

пример:

<?xml version="1.0"?>
<package >
    <metadata>
    <!-- ... -->
    </metadata>
    <files>
      <!-- Include your MSBuild target to \build -->
      <file src="build\myNuGetRestoreTarget.targets" target="build" />
    </files>
</package>

см.: https://docs.microsoft.com/en-us/nuget/create-packages/creating-a-package#включая-msbuild-props-and-targets-in-a-package

person razgoolyy    schedule 13.12.2017

Это по дизайну. Пакеты NuGet больше не должны изменять исходный код проекта, а только добавлять его к построенному выходу или процессу сборки (в дополнение к библиотекам .NET). Папка content для добавления источников в проект по-прежнему поддерживается только для проектов на основе packages.config, поскольку это было бы критическим изменением для существующих проектов, но проекты, использующие project.json или PackageReference (VS 2017), получают новое поведение.

person Martin Ullrich    schedule 28.08.2017