C# 如何打包项目和使用过的NuGet包+;文件夹?
我正在开发一个,从中创建NuGet包时遇到了一些问题。一些信息:C# 如何打包项目和使用过的NuGet包+;文件夹?,c#,.net,visual-studio,nuget,.net-standard,C#,.net,Visual Studio,Nuget,.net Standard,我正在开发一个,从中创建NuGet包时遇到了一些问题。一些信息: 该项目仅针对.NET标准2.0 该项目在同一解决方案中使用两个引用的项目,每个项目都使用一些其他NuGet包。是我当前解决方案的屏幕 其中一个项目,ComputeSharp.Shaders也引用了两个.dll文件,dxcompiler.dll和dxil.dll。该项目引用了这两个文件,并在其.csproj文件中截取了以下内容。我用update.dll文件创建了一个PR,因此我不再需要手动将这两个.dll文件捆绑到我的项目中。因此
- 该项目仅针对.NET标准2.0
- 该项目在同一解决方案中使用两个引用的项目,每个项目都使用一些其他NuGet包。是我当前解决方案的屏幕
- 其中一个项目,
也引用了两个.dll文件,ComputeSharp.Shaders
和dxcompiler.dll
。该项目引用了这两个文件,并在其.csproj文件中截取了以下内容。我用update.dll文件创建了一个PR,因此我不再需要手动将这两个.dll文件捆绑到我的项目中。因此,这不再是一个问题✅李>dxil.dll
- 在主
项目的文件夹中,我还有一个结构如下的.nuspec文件,它还列出了所有3个项目使用的所有NuGet包(请注意,ComputeSharp
文件的路径上升一个目录,因为它位于*.mustach
项目中,而不是我从中构建NuGet包的路径,它只是ComputeSharp.Shaders
:ComputeSharp
计算竖琴
...
...
- 为了创建NuGet包,我首先在发布模式下构建
,然后在该项目的文件夹中打开一个cmd,然后运行:ComputeSharp
- 这确实创建了一个看起来不错的包。它包含所有3个项目的程序集,我使用的两个.dll文件和
项目中的ComputeSharp.Shaders
内容文件mustach
- 一旦我可以看到包的所有依赖项的列表,正如您所看到的。所以,看起来也不错
SharpDX
名称空间),这让我觉得上一点可能是正确的。我还有最后一个问题:.mustache
文件(以及相关的父文件夹)未在生成输出目录中创建,因此无法在运行时加载。我不确定原因,因为我在.nuspec文件中指定了copyToOutputDirectory=“true”
我可能在这里遗漏了一些明显的东西,我确实检查了文档和无数关于NuGet软件包之类的其他SO问题,但我真的不知道我在这里做错了什么。我确实上传了其他NuGet软件包,使用相同的方法,将引用的NuGet软件包包括在.nuspec文件中,它们工作正常安装后就可以了
谢谢你的帮助
编辑#1:间接依赖项现在已正确加载,因此最后一个遗留问题是内容文件未复制到生成输出目录(请参见上面的更改)
编辑#2:关闭此选项,因为它的范围太广,并且第一部分已经解决(.dll文件和间接包引用)。仅针对内容文件未被复制的问题打开后续问题。
dxcompiler.dll
和dxil.dll
我认为不是您自己的输出,可能会被使用包的应用程序使用的其他库使用(输入dll hell)。在这种情况下,它们应该是隐式依赖项,这意味着您不在包中声明它们,而是要求应用程序引用另一个包来获取它们。当然,这并不理想,但它避免了与其他库的冲突。您现在可以提供该包;您的程序集将引用DLL,但您的包e不会引用提供这些DLL的包……这允许应用程序(和您的库)将来切换到规范包,而无需与其他库争夺从何处获取这些DLL。当规范包可用时,您可以声明对规范包的依赖关系。我不确定这是否解决了这个确切的问题,但它解决了我看到的一个问题(因此未作为答案提供).嘿,谢谢你的提醒!没错,这两个库不是我自己生成的。所以,问题是这些库实际上没有被项目引用(如果我删除它们,它仍然可以正常构建),而是在运行时加载到它们公开的一些API中,以P/Invoke(这是通过第三方绑定库完成的).至少现在,我希望第一个alpha包能够正常工作。你知道我为什么会遇到其他问题吗?NuGet依赖项似乎没有正确加载?再次感谢!这很有意义,而且你已经将它标记为“alpha”这很好。不幸的是,我现在没有任何线索,我深入研究了一些依赖关系。它应该能够捕获可传递的依赖关系。我建议删除所有obj
和bin
文件夹,让它为所有项目重建project.assets.json
。这通常对我有帮助“Dependencies”节点有一个黄色的警告覆盖图标,尽管一切正常。我确实尝试清理了所有内容,但不幸地得到了相同的结果。我没有得到的是,如果我将.nupkg文件重命名为.zip并打开它,我可以看到那里的.nuspec列出了所有依赖项(如预期的那样),所以在安装我的NuGet软件包时,我真的不知道为什么VS实际上没有在我的测试项目中安装它们:/无论如何,谢谢!dxcompiler.dll
和dxil.dll
我认为不是您自己的输出,并且可以被使用您的软件包的应用程序使用的其他库使用(输入dll hell).在这种情况下,它们应该是隐式依赖项,这意味着
nuget pack ComputeSharp.csproj -Prop Configuration=Release -IncludeReferencedProjects