【问题标题】:Packing files on nuget在nuget上打包文件
【发布时间】:2018-02-05 13:36:04
【问题描述】:

我正在尝试将文件夹和文件结构打包到 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

我收到一个包含以下内容的包裹:

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

我做错了什么?

【问题讨论】:

  • 源文件需要添加到“内容”的目标文件夹中。另请注意,这仅适用于使用 packages.config 文件的项目 - docs.microsoft.com/en-gb/nuget/create-packages/…
  • 我创建了一个“内容”文件夹但没有用。我的目标项目不使用 packages.config。他们在 csproj 中使用 PackageReference。如果我不使用 packages.config 文件,我不能将文件添加到我的源代码吗?我编辑了我的 nuspec xml 文件。

标签: .net visual-studio nuget


【解决方案1】:

我做错了什么?

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

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

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

以下是我的.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就会添加到新项目中:

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2023-02-26
    相关资源
    最近更新 更多