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

mrphzbgm  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(143)

我已经创建了npm包,其中有js和css文件,就像bootstrap一样。我想为.Net mvc Web应用程序提供相同的包,所以我创建了.nuspec文件,指定files从构建输出和创建Nuget包。Nuget和NPM包都工作得很好。
现在我想发布相同的包为点净核心项目。当我在dot net core web应用程序中安装相同的Nuget包时,它安装成功,但没有将静态文件复制到项目文件夹中。
如何为dot net核心应用程序创建/修复静态文件的nugget包。我不想创建.net核心项目来运送静态文件。这将是伟大的,如果我可以添加一些配置文件,如.nuspec为dot net核心应用以及。
我已经搜索,但无法得到任何帮助方面,所以任何建议或参考将apppriciated。
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,但它没有找到新创建的文件。
这个箭头意味着什么,为什么它找不到文件?

ercv8c1e

ercv8c1e1#

从静态文件为dot net核心项目创建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
然后先清理nuget缓存,或者删除C:\Users\xxx(current user)\.nuget\packages下的所有缓存。
之后安装新版本MyPackage,然后先build你的项目,你可以看到主项目下的文件被复制了。
另外还有a similar issue about your request,还有这个。

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

更新1

如果您希望这些文件只复制到Net Core项目上,则应放弃使用nupkg中的content节点。当您安装包时,它将自动将文件复制到NETFramework主项目中。
相反,您可以将这些文件放在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缓存。

kuhbmx9i

kuhbmx9i2#

在我们的组织中,我们希望在不同的dotnet项目中共享静态文件(css文件,图标,字体,js文件)。我们根据钱先生的回答创建了一个NuGet包。

第一步:nuspec文件

首先,创建一个名为ProjectName.nuspec的文件,包含以下内容

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>ProjectName</id>
    <description>A NuGet package containing static files</description>
    <authors>AuthorName</authors>
    <version>1.0.0</version>
  </metadata>
  <files>
    <file src="dist\css\**" target="content\css" />
    <file src="dist\assets\**" target="content\assets" />
    <file src="build\ProjectName.props" target="build" />
    <file src="build\template.gitignore" target="content\.gitignore" />
  </files>
</package>

这里,我们要分发的文件是dist\css\中的css文件和dist\assets\中的一些其他文件。

第二步: prop 档案

然后,创建一个名为ProjectName.props的文件,并将其放在名为build的文件夹中。它应包括:

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

此脚本将所有文件复制到wwwroot中的文件夹ProjectName

第三步:. gitignore文件

我们还想复制一个. gitignore文件,这样复制到使用这个NuGet包的项目的文件就不会签入git。在构建项目时,文件总是会被复制到项目中,所以我们希望git忽略这些文件。
创建一个名为template.gitignore的文件,并将其放入build文件夹中,包含以下内容:

# This file is included in the NuGet package with the name .gitignore such that none of these files will
# be checked into projects that uses this package. The files are copied into the repository when building
# the project with the NuGet package.

# Ignore all files in the folder
*

第四步:Pack NuGet包

您需要NuGet客户端工具(nuget.exe):https://learn.microsoft.com/en-us/nuget/install-nuget-client-tools
运行nuget pack ProjectName.nuspec,你就有了NuGet包。

相关问题