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

Create Nuget package for dot net core project from static files

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

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

如何 create/fix 点网核心应用程序的静态文件包。我不想创建 .net 核心项目来传送静态文件。如果我也可以为 dot net 核心应用程序添加一些配置文件,如 .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,但没有找到新创建的文件。

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

Create Nuget package for dot net core project from static files

您应该使用 <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你的项目先和可以看到主工程下复制了文件

外,还有 and also .

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

更新 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 缓存。