我有一个类库(net47)项目,我想把我的dll和几个静态内容文件(js,css,images ......)打包成nuget。我想使用这个dll和消费者项目中的内容。这些项目将是MVC PackageReference项目。在这些项目中,本地静态文件位于wwwroot文件夹中。
我试过这个:NuGet ContentFiles Demystified但是我引用了我的js和css文件(它们没有被复制到我的项目内容中)。
在我的nuspec中,我尝试过所有构建选项:EmbeddedResource,Content,None和Compile,但这些引用总是在Compile模式下导入。所以当我开始调试时出现编译错误。
我知道这可以通过Package.config项目实现,而且非常简单但我的所有消费者项目都是PackageReference。
这是我的nuspec
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyProject</id>
<version>1.0.0</version>
<authors>My</authors>
<owners>My</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>LVP</description>
<copyright>Copyright 2018</copyright>
<tags>Tag1 Tag2</tags>
<contentFiles>
<files include="any/any/bd.js" buildAction="content" flatten="true" copyToOutput="false"/>
</contentFiles>
</metadata>
<files>
<file src="contentFiles/any/any/bd.js" target="contentFiles/any/any/bd.js" />
</files>
</package>
我用这个powershell命令打包我的nuget:
nuget pack MyProject.nuspec
虽然我也尝试过使用csproj:
nuget pack MyProject.csproj
我的源文件夹结构如下:
C:\...[projectPath]...\contentFiles\any\any\bd.js
安装忽略了我的构建操作。 为什么总是尝试编译我的内容文件?有没有更好的方法将静态内容添加到消费者项目中?
答案 0 :(得分:2)
安装忽略了我的构建操作。为什么总是尝试编译我的内容文件?有没有更好的方法将静态内容添加到消费者项目中?
要回答上一个问题Packing files on nuget,我创建了一个示例nuget包,并为内容文件设置构建操作content
,安装nuget包后,将设置构建操作{ {1}}:
然后我检查了你的content
文件,发现它应该是正确的。因此,该问题与您的.nuspec
文件无关。
除了,在上图中,您会注意到内容文件的路径是nuget local cache:
.nuspec
NuGet将在安装nuget软件包时首先从本地缓存中提取nuget软件包,以避免下载计算机上已有的软件包。在其他病房中,尽管我们已在本地更新了nuget包,但nuget会首先检测本地缓存,如果它在缓存中找到相同的包,nuget将从缓存而不是本地feed安装它。
要解决此问题,请在安装更新的nuget包之前尝试删除本地缓存中的nuget包。通常,当我们再次打包相同的包时,我们C:\Users\<UserName>\.nuget\packages\
。 nuspec`文件,因此nuget本地缓存不会捕获它们。
评论更新:
我已尝试增加版本号并删除nuget缓存,问题仍然存在。我的构建操作始终设置为&#34; C#Compiler&#34;。我只是尝试更改js文件的名称,项目导入新名称,所以我认为它不是缓存问题
在测试了您的nuget包之后,我找到了您遇到该问题的原因,我们应该保持d better change the package version in the
和src
路径在target
中相同的路径文件。由于您希望将内容文件设置为.nuspec
文件夹,因此应将文件设置在wwwroot
文件夹中,然后打包wwwroot
:
.nuspec
关注我的.nuspec脚本(不需要内容节点):
<contentFiles>
<files include="any/any/wwwroot/css/bd.css" buildAction="Content" copyToOutput="false" flatten="true" />
<files include="any/any/wwwroot/js/bd.js" buildAction="Content" copyToOutput="false" flatten="true" />
</contentFiles>
这是nuget包:
https://1drv.ms/u/s!Ai1sp_yvodHfhTk5xutPpaBZLC-A
您可以下载并测试。
然后将其安装到ASP.NET核心MVC项目中: