尝试创建可重用的ASP.NET MVC应用程序。模板/的NuGet /两者?

时间:2018-01-09 18:11:33

标签: asp.net-mvc visual-studio nuget

我有一个带有自定义控制器和一些默认视图的“核心”应用程序,我想用它来创建一些扩展核心功能的自定义应用程序。我理解从这个项目创建模板的过程。但是如果我添加一些新的核心功能,我希望能够从该模板刷新并维护我的所有扩展。模板似乎不支持这一点。我已经对NuGet进行了一些实验,因为这似乎更符合我的要求,但我不确定是否将整个核心应用程序放入NuGet包中是正确的方法。有人做过这样的事吗?

1 个答案:

答案 0 :(得分:0)

  

但我不确定是否将整个核心应用程序放入NuGet包中是正确的方法

众所周知,NuGet本身是一个需要清单或项目文件才能工作的最小工具,而dotnet pack只会打包源文件,而不是所有资产。因此,如果您想将整个核心应用程序放入NuGet包中,您应该在.nuspec文件中手动添加清单。

此外,由于您只有一些自定义控制器和一些用于创建一些自定义应用程序的默认视图,因此您不需要将整个核心应用程序包含到NuGet包中,只需将这些控制器和视图添加到nuget包中即可。< / p>

由于您使用的是核心应用程序,因此应使用ContentFiles来包含控制器和视图文件。以下是我的测试样本:

我的.nuspec文件:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>MyTestCore</id>
    <version>4.0.0</version>
    <authors>TestContentFile</authors>
    <owners>TestContentFile</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <contentFiles>
      <files include="any/any/Views/Test.cshtml" buildAction="content" flatten="true" copyToOutput="false"/>
      <files include="any/any/Controllers/Test.cs" buildAction="content" flatten="true" copyToOutput="false"/>
    </contentFiles>
  </metadata>

  <files>
    <file src="contentFiles/any/any/Views/Test.cshtml" target="contentFiles/any/any/Views/Test.cshtml" />
    <file src="contentFiles/any/any/Controllers/Test.cs" target="contentFiles/any/any/Controllers/Test.cs" />
  </files>
</package>

文件资源管理器中我的控制器和视图文件的结构:

enter image description here

打包此包后,将其安装到其他项目,控制器和视图文件将添加到项目中。

有关详细信息,请参阅NuGet ContentFiles Demystified