繁体   English   中英

如何将某些视图和文件夹排除在已部署的ASP.NET MVC NuGet包中?

[英]How can I exclude some views and folders from being included into the deployed ASP.NET MVC NuGet package?

我使用Visual Studio 2017在ASP.NET MVC 5框架的顶部用C#编写了一个项目。该项目在.NET 4.7.2框架上运行。

我正在尝试使用nuget.exe为我的项目创建一个包,以便我可以将其安装到其他项目中。

我有一个名为resources的文件夹,其中包含我不希望包含在我的包中的.js.css文件。 我希望能够排除整个resources文件夹。 我也不想包含我的所有视图,只应包含Views/Home文件夹中的Views/Home

如何排除这些文件包含在我的打包项目中?

我尝试通过在所有视图上添加排除来跟随文档 ,然后添加我想要的那个。 你可以看到Follow是我当前的.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:/

如何将某些视图和文件夹排除在已部署的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文件并将其安装到Console App项目中以进行测试:

在此输入图像描述

希望这可以帮助。

所以我最终复制了你的问题并弄清楚它在做什么。 基本上nuget pack正在查看.csproj文件和.nuspec文件。 它包含项目中标记为Build Action: Content.csproj文件中的所有Build Action: Content 这就是为什么您的观点显示有趣并且文件未被正确排除的原因。

所以要修复它你有几个选择。

1)更改项目中的构建操作,使这些文件不是内容(只使用None

2)构建.nuspec文件以包含您需要的所有文件,例如Leo的答案显示,然后使用nuget pack projectname.nuspec构建,仅基于.nuspec文件进行.nuspec

从其他一些细节中查看此答案

NuGet Pack:忽略默认包含

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM