Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何打包项目和使用过的NuGet包+;文件夹?_C#_.net_Visual Studio_Nuget_.net Standard - Fatal编程技术网

C# 如何打包项目和使用过的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文件捆绑到我的项目中。因此

我正在开发一个,从中创建NuGet包时遇到了一些问题。一些信息:

  • 该项目仅针对.NET标准2.0
  • 该项目在同一解决方案中使用两个引用的项目,每个项目都使用一些其他NuGet包。是我当前解决方案的屏幕

  • 其中一个项目,
    ComputeSharp.Shaders
    也引用了两个.dll文件,
    dxcompiler.dll
    dxil.dll
    。该项目引用了这两个文件,并在其.csproj文件中截取了以下内容。我用update.dll文件创建了一个PR,因此我不再需要手动将这两个.dll文件捆绑到我的项目中。因此,这不再是一个问题✅
  • 在主
    ComputeSharp
    项目的文件夹中,我还有一个结构如下的.nuspec文件,它还列出了所有3个项目使用的所有NuGet包(请注意,
    *.mustach
    文件的路径上升一个目录,因为它位于
    ComputeSharp.Shaders
    项目中,而不是我从中构建NuGet包的路径,它只是
    ComputeSharp

计算竖琴
...
...
  • 为了创建NuGet包,我首先在发布模式下构建
    ComputeSharp
    ,然后在该项目的文件夹中打开一个cmd,然后运行:
  • 这确实创建了一个看起来不错的包。它包含所有3个项目的程序集,我使用的两个.dll文件和
    ComputeSharp.Shaders
    项目中的
    mustach
    内容文件
  • 一旦我可以看到包的所有依赖项的列表,正如您所看到的。所以,看起来也不错
问题:一旦我创建了一个测试项目并安装了NuGet软件包,我注意到两件事:第一件事是当我尝试使用任何API时得到的,这使我觉得其他NuGet软件包根本没有正确安装,然后我无法从这些软件包中找到任何API(例如,我根本看不到
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