gpt4 book ai didi

c# - 如何排除某些 View 和文件夹不包含在已部署的 ASP.NET MVC NuGet 包中?

转载 作者:太空狗 更新时间:2023-10-29 23:36:01 33 4
gpt4 key购买 nike

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

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

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

如何将这些文件排除在我的打包项目之外?

我试图跟随 documentation通过在所有 View 上添加排除项,然后添加我想要的 View 。如您所见,下面是我当前的 .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>

但是,当我在不同的项目中安装包时,所有的 View 仍然包含在内。

我使用以下命令打包我的包,其中 T:/ 是我的网络共享

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

最佳答案

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

文件元素属性 exclude 是从 src 位置排除文件的正确属性。但是您缺少另一个属性target:

The relative path to the folder within the package where the source files are placed, which must begin with lib, content, build, or tools.

查看文档File element attributes了解更多详情。

否则,安装包时,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工程中进行测试:

enter image description here

希望这对您有所帮助。

关于c# - 如何排除某些 View 和文件夹不包含在已部署的 ASP.NET MVC NuGet 包中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54890838/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com