在nuget上打包文件

时间:2018-02-05 13:36:05

标签: .net visual-studio nuget

我正在尝试在nuget中打包文件夹和文件结构,以便将它们复制到目标项目中。也就是说,只有内容。我希望在安装nuget时复制所有这些文件和文件夹。

这是我的nuspec:

<?xml version="1.0"?>
<package>
  <metadata>
    <id>MVCViewProvider</id>
    <version>1.0.0</version>
    <authors>M</authors>
    <owners>M</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Test Package</description>
    <releaseNotes>Test Package</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="Controllers\**\*.*" target="Content\Controllers" />
    <file src="Views\**\*.*" target="Content\Views" />
  </files>
</package>

在PowerShell中执行此命令时:

nuget pack MVCViewProvider.nuspec

我收到了这个内容的包裹:

enter image description here

我的文件夹是视图和控制器。问题是,当我将nuget添加到其他项目时,没有创建任何内容。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

我做错了什么?

需要将包更改为使用contentFiles。因为与Packages.config一起使用的NuGet包,并不总是在传递的NuGet环境(使用Project.jsonPackageReferences的项目)中工作。在传递性NuGet环境中工作的包必须使用“contentFiles”而不是“content”。

例如,我创建了一个contentFiles文件夹,其中包含子文件夹any\any\Controllersany\any\Views。在Test.cs文件夹中添加Controllers,然后在Test.cshtml文件夹中添加Views

enter image description here

然后在.nuspec文件夹所在的文件夹TestNuGetSample下创建contentFiles

enter image description here

以下是我的.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>

然后将此.nupsec文件打包到nuget包,并将其设置为nuget本地存储库。

在csproj中使用PackageReference创建一个新的测试项目ASP.NET Core MVC项目,然后安装该nuget包,Test.cs和Test.cshtml将被添加到新项目中:

enter image description here

希望这有帮助。