簡體   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