如何在.nuspec中正确排除NuGet包内的Newtonsoft.Json.dll?
问题分析与解决方法
你之前的写法完全搞反了——那行代码是把Newtonsoft.dll打包到NuGet包的根目录,而不是排除它,这就是为什么无效。
要在nuspec里排除指定文件,正确的用法是利用exclude属性,分两种场景处理:
场景1:批量包含输出文件并排除目标dll
如果你的类库编译输出都在bin\Release下,想打包所有输出文件但排除Newtonsoft.Json.dll,可以这么写:
<files> <!-- 将bin/Release下所有文件打包到lib目录(替换net4xx为你的目标框架,比如net462) --> <file src="bin\Release\**" target="lib\net4xx" exclude="**\Newtonsoft.Json.dll" /> </files>
这里的**是通配符,匹配任意层级的文件;exclude指定要排除的文件路径,同样支持通配符。
场景2:逐个指定要打包的文件
如果是手动指定每个要打包的文件,直接不要写包含Newtonsoft.Json.dll的<file>节点就行:
<files> <file src="bin\Release\YourClassLibrary.dll" target="lib\net4xx" /> <file src="bin\Release\YourClassLibrary.pdb" target="lib\net4xx" /> <!-- 只列你需要的文件,完全不碰Newtonsoft.Json.dll --> </files>
额外建议
更规范的做法是不要手动拷贝Newtonsoft.Json.dll到类库项目,而是通过NuGet引用Newtonsoft.Json包,然后在nuspec里添加依赖声明:
<dependencies> <group targetFramework="net4xx"> <dependency id="Newtonsoft.Json" version="[1.0, )" /> </group> </dependencies>
这样使用你的NuGet包的项目会自动根据自身已有的Newtonsoft.Json版本适配,避免版本冲突。如果因为特殊需求必须排除项目里已有的dll,用前面的exclude写法即可。
内容的提问来源于stack exchange,提问作者Computer
相关产品推荐
相关产品推荐

