Как я могу исключить некоторые виды и папки из включенного в развернутый пакет ASP.NET MVC NuGet? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть проект, написанный с C# поверх платформы ASP.NET MVC 5 с использованием Visual Studio 2017. Проект работает на платформе .NET 4.7.2.

Я пытаюсь использоватьnuget.exe для создания пакета для моего проекта, чтобы я мог установить его в другие проекты.

У меня есть папка с именем resources, которая содержит .js и .css файлы, которые я не хочувключить в мой пакет.Я хочу иметь возможность исключить всю папку resources.Я также не хочу включать все мои представления, должны быть включены только представления в папке Views/Home.

Как я могу исключить эти файлы из моего упакованного проекта?

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

<?xml version="1.0"?>
<package >
  <metadata>
    <id>....</id>
    <version>1.0.0</version>
    <title>...</title>
    <authors>...</authors>
    <owners>...</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>...</description>
    <releaseNotes></releaseNotes>
    <copyright>2019</copyright>
    <tags></tags>
  </metadata>  

   <files>

       <file src="**\*.*" exclude="**\*.designer.cs;**\*.csproj;**\*.pdb;**\*.user;**\*.vspscc;**\*.nuspec;libman.json;package.json;packages.config;Web.config;ApplicationInsights.config;public\**\*.*;Resource\**\*.*;bin\**\*.*;node_modules\**\*.*;obj\**\*.*;**\*.log;Views\**\*.*"/>
       <file src="Views\Home\**\*.cshtml" />

   </files>
</package>

ОБНОВЛЕНО

Я также попытался добавить те же правила в contentFiles, вот так

<?xml version="1.0"?>
<package >
  <metadata>
    <id>....</id>
    <version>1.0.0</version>
    <title>...</title>
    <authors>...</authors>
    <owners>...</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>...</description>
    <releaseNotes></releaseNotes>
    <copyright>2019</copyright>
    <tags></tags>
    <contentFiles>
       <files include="**\*.*" exclude="**\*.designer.cs;**\*.csproj;**\*.pdb;**\*.user;**\*.vspscc;**\*.nuspec;libman.json;package.json;packages.config;Web.config;ApplicationInsights.config;public\**\*.*;Resource\**\*.*;bin\**\*.*;node_modules\**\*.*;obj\**\*.*;**\*.log;Views\**\*.*"/>
       <file include="Views\Home\**\*.cshtml" />
    </contentFiles>
  </metadata>  

   <files>

       <file src="**\*.*" exclude="**\*.designer.cs;**\*.csproj;**\*.pdb;**\*.user;**\*.vspscc;**\*.nuspec;libman.json;package.json;packages.config;Web.config;ApplicationInsights.config;public\**\*.*;Resource\**\*.*;bin\**\*.*;node_modules\**\*.*;obj\**\*.*;**\*.log;Views\**\*.*"/>
       <file src="Views\Home\**\*.cshtml" />

   </files>
</package>

Однако ВСЕ представления все еще включаются при установке пакета в другом проекте.

Я упаковываю свой пакет с помощью следующей команды, где T:/ - это общий сетевой ресурс.

nuget pack -Prop Configuration=Release -OutputDirectory T:/

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Итак, я, наконец, повторил вашу проблему и выяснил, что она делает.В основном nuget pack ищет как ваш файл .csproj, так и файл .nuspec.Он включает в себя все в файле .csproj, помеченном как Build Action: Content в вашем проекте.Вот почему ваши взгляды выглядят смешно, а файлы не исключаются должным образом.

Итак, чтобы исправить это, у вас есть пара опций.

1) Измените действие сборки в вашем проекте, чтобы эти файлы не содержали содержимое (просто используйте None)

2) Создайте файл .nuspec, включив в него все файлы, которые вам необходимы, как показано в ответе Лео, а затем соберите с помощью nuget pack projectname.nuspec, чтобы упаковывать только файлы, основанные ТОЛЬКО на .nuspec файле

См. Этот ответиз некоторых других деталей

NuGet Pack: игнорировать по умолчанию включает

0 голосов
/ 27 февраля 2019

Как я могу исключить некоторые виды и папки из включенного в развернутый пакет ASP.NET MVC NuGet?

Атрибут элемента файла exclude является правильным атрибутом для исключения файловиз местоположения src.Но вам не хватает другого атрибута target:

Относительный путь к папке в пакете, в котором находятся исходные файлы, который должен начинаться с lib, content, build или tools.

Проверьте документ Атрибуты элемента файла для получения более подробной информации.

В противном случае пакет nuget не знает, куда помещать файлы в проект при установке пакета.

Итак, файл .nuspec должен выглядеть следующим образом:

   <files>

       <file src="**\*.*" exclude="**\*.designer.cs;**\*.csproj;**\*.pdb;**\*.user;**\*.vspscc;**\*.nuspec;libman.json;package.json;packages.config;Web.config;ApplicationInsights.config;public\**\*.*;Resource\**\*.*;bin\**\*.*;node_modules\**\*.*;obj\**\*.*;**\*.log;Views\**\*.*" target="content\/>
       <file src="Views\Home\**\*.cshtml" target="content\Views\Home\" />

   </files>

Но этот пакет добавит все файлы в корневую папку установленного проекта.Поскольку вы включили все файлы с подстановочным знаком **\*.*, Nuget не смог интеллектуально назначить все эти файлы той папке, в которой они должны быть.

Чтобы решить эту проблему, мы должны настроить файлы в разных папках на разныепапки, например:

<file src="App_Start\*.cs" target="content\App_Start\" />

Итак, .nuspec должен выглядеть следующим образом:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>TestWebApp</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2019</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>

  <files>
    <file src="App_Start\*.cs" target="content\App_Start\" />
    <file src="resources\*.*" target="content\resources\" />
     ....
    <file src="Views\Home\**\*.cshtml" target="content\Views\Home\" />
  </files>

</package>

Затем упакуйте этот файл .nuspec и установите его в проект консольного приложения для тестирования:

enter image description here

Надеюсь, это поможет.

...