【问题标题】:Create Nuget package for dot net core project from static files从静态文件为 dot net core 项目创建 Nuget 包
【发布时间】:2020-08-20 14:37:00
【问题描述】:

我创建了 npm 包,其中包含 js 和 css 文件,类似于 bootstrap 作为文件夹结构。我想为 .Net mvc Web 应用程序提供相同的包,所以我创建了 .nuspec 文件,从构建输出中指定 files 并创建了 Nuget 包。 Nuget 和 NPM 包都运行良好。

现在我想为 dot net core 项目发布相同的包。当我在 dot net core web 应用程序中安装相同的 Nuget 包时,它安装成功,但没有将静态文件复制到项目文件夹中。

如何为 dot net core 应用程序创建/修复静态文件的 nugget 包。我不想创建 .net 核心项目来发送静态文件。如果我也可以为 dot net core 应用程序添加一些配置文件,例如 .nuspec,那就太好了。

我已经搜索但无法获得任何帮助,因此任何建议或参考都会被应用。

myproject.nuspec

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyPackage</id>
    <version>1.0.1</version>
    <title>MyProject</title>
    <authors>Me</authors>
    <owners>Me</owners>
    <projectUrl>some url...</projectUrl>   
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This is similar to bootstrap</description>
    <copyright>Copyright 2020</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="jQuery" version="[3.0.0, 4.0.0)" />
    </dependencies>
  </metadata>
  <files>
    <file src="dist\css\**\*.*" target="content\Content\css" />
    <file src="dist\fonts\**\*.*" target="content\Content\fonts" />
    <file src="dist\js\mypackage.js" target="content\Scripts" />
    <file src="dist\images\**\*.*" target="content\Content\Images" />
  </files>
</package> 

更新:我尝试了@thatguy 下面给出的解决方案,它确实将文件复制到了适当的文件夹中。我可以在 Visual Studio 中看到这些。但是新创建的文件和文件夹上有箭头符号,而其他文件没有。我尝试在页面代码中包含 css,但它没有找到新创建的文件。

这个箭头是什么意思,为什么找不到文件?

【问题讨论】:

  • 对不起,.NET Core 中的contentFiles 似乎不像之前content 那样支持这种场景,请看这些相关帖子:12
  • 另外,您应该保持&lt;package_id&gt;.props 的名称与package_id 相同。
  • 嗨 Dipak,有关于这个问题的最新消息吗?你能告诉我们关于这个问题的任何进展吗?如果您愿意,我们可以为您提供任何支持。
  • @PerryQian-MSFT 它按预期工作。只是一个问题是它在 .NET MVC 项目以及 .Net Core 中创建文件。有什么方法可以将其设置为仅 .NET 核心项目?
  • 如果你只想在net core项目中复制这些文件,你应该放弃在nupkg中使用content节点。安装包时它会自动将文件复制到NET Framework主项目中

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


【解决方案1】:

从静态文件为 dot net core 项目创建 Nuget 包

您应该使用<package_id>.props 文件。

1) 在您的MyPackage 中创建一个名为build 的文件夹,然后在其中添加一个名为MyPackage.props 的文件。

2) 然后在其中添加这些:

<Project>
  <Target Name="CopyFilesToProject" BeforeTargets="Build">
    <Message Text="Copy css files to project" />
    <ItemGroup>
      <SourceScripts Include="$(MSBuildThisFileDirectory)..\..\content\**\*.* "/> //file from the nuget package
    </ItemGroup>
    <Copy
       SourceFiles="@(SourceScripts)"
       DestinationFiles="@(SourceScripts -> '$(MSBuildProjectDirectory)\%(RecursiveDir)%(Filename)%(Extension)')"   
         />
  </Target>
  
</Project>

3) 更改为使用此 nusepc 文件:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyPackage</id>
    <version>1.0.1</version>
    <title>MyProject</title>
    <authors>Me</authors>
    <owners>Me</owners>
    <projectUrl>some url...</projectUrl>   
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This is similar to bootstrap</description>
    <copyright>Copyright 2020</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="jQuery" version="[3.0.0, 4.0.0)" />
    </dependencies>
  </metadata>
  <files>
    <file src="dist\css\**\*.*" target="content\Content\css" />
    <file src="dist\fonts\**\*.*" target="content\Content\fonts" />
    <file src="dist\js\mypackage.js" target="content\Scripts" />
    <file src="dist\images\**\*.*" target="content\Content\Images" />
    <file src="build\MyPackage.props" target="build" />
  </files>
</package> 

4)重新打包你的项目MyPackage,然后先在你的主项目中先卸载旧的nuget包MyPackage

那么clean nuget caches first或者删除C:\Users\xxx(current user)\.nuget\packages下的所有缓存。

之后,安装新版本MyPackage然后build你的项目,你可以看到文件被复制到主项目下.

除此之外,还有a similar issue about your requestthis one

===================================

更新 1

如果您只想将这些文件复制到 Net Core 项目中,您应该放弃使用 nupkg 中的 content 节点。安装包时,它会自动将文件复制到 NET Framework 主项目中。

相反,您可以将这些文件放在 nupkg 的另一个名为 resource 的文件夹下。

你可以按照我的步骤来:

1)MyPackage.props文件更改为:

<Project>
  <Target Name="CopyFilesToProject" BeforeTargets="Build">
    <Message Text="Copy css files to project" />
    <ItemGroup>
      <SourceScripts Include="$(MSBuildThisFileDirectory)..\..\resource\**\*.* "/> //file from the nuget package
    </ItemGroup>
    <Copy
       SourceFiles="@(SourceScripts)"
       DestinationFiles="@(SourceScripts -> '$(MSBuildProjectDirectory)\%(RecursiveDir)%(Filename)%(Extension)')"   
         />
  </Target>

</Project>

2)xxx.nuspec文件更改为:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyPackage</id>
    <version>1.0.1</version>
    <title>MyProject</title>
    <authors>Me</authors>
    <owners>Me</owners>
    <projectUrl>some url...</projectUrl>   
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>This is similar to bootstrap</description>
    <copyright>Copyright 2020</copyright>
    <tags></tags>
    <dependencies>
      <dependency id="jQuery" version="[3.0.0, 4.0.0)" />
    </dependencies>
  </metadata>
  <files>
    <file src="dist\css\**\*.*" target="resource\Content\css" />
    <file src="dist\fonts\**\*.*" target="resource\Content\fonts" />
    <file src="dist\js\mypackage.js" target="resource\Scripts" />
    <file src="dist\images\**\*.*" target="resource\Content\Images" />
    <file src="build\MyPackage.props" target="build" />
  </files>
</package> 

3)然后重新打包你的项目并安装新的,在它之前,你应该先清理nuget缓存。

【讨论】:

  • 感谢您的更新回答!它按预期工作。
猜你喜欢
  • 2017-02-24
  • 2017-04-01
  • 1970-01-01
  • 2019-01-28
  • 2022-11-01
  • 2019-03-22
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多