Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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包指向同一个Dll怎么办_C#_.net Core_Nuget_Nuget Package - Fatal编程技术网

C# 如果两个nuget包指向同一个Dll怎么办

C# 如果两个nuget包指向同一个Dll怎么办,c#,.net-core,nuget,nuget-package,C#,.net Core,Nuget,Nuget Package,嗯。所以我有一个解决方案和三个项目 Project-A.csproj(变成A.nupkg) 项目B.csproj(转化为B.nupkg) Utils.csproj 由于utils.csproj有许多中心函数,因此a和B都将utils.dll作为项目引用。所以基本上,当我转到A或B的/bin文件夹时,我可以看到utils.dll。到目前为止还不错 现在,我有另一个项目。让我们称之为consumer.csproj,它以前面提到的相同顺序引用了A.nupkg和B.nupkg。此外,Utils.dll具

嗯。所以我有一个解决方案和三个项目

  • Project-A.csproj(变成A.nupkg)
  • 项目B.csproj(转化为B.nupkg)
  • Utils.csproj
  • 由于utils.csproj有许多中心函数,因此a和B都将utils.dll作为项目引用。所以基本上,当我转到A或B的/bin文件夹时,我可以看到utils.dll。到目前为止还不错

    现在,我有另一个项目。让我们称之为consumer.csproj,它以前面提到的相同顺序引用了A.nupkg和B.nupkg。此外,Utils.dll具有一些函数,这些函数需要位于特定位置的某些
    .json
    文件

    现在,当我首先引用A.nupkg时,它确实带来了utils.dll,然后我的使用者项目知道,当运行代码请求utils.dll时,它需要转到/A/lib。这是正常的,直到我的消费者项目调用了一些B.nupkg功能,然后调用了utils.csproj功能,该功能在a.nupkg/lib文件夹中查找一些json文件,因为现在每次调用utils.csproj时,编译器都会转到a.nupkg文件夹查找它

    这里有什么我做错的吗?如果没有,我可以做些什么来解决这个问题


    现在,我需要以可移植的格式维护库项目和NUGET。这意味着,如果您需要它从json文件动态获取配置等,您的utils项目不应该在内部尝试使用这些json。您的utils项目必须具有类似于
    UtilsConfig.UseJson(“您的json路径”)
    的函数。此功能现在可用于消费者项目的启动。如果
    A
    B
    也需要特定的json文件,则始终可以使用
    UseJson
    函数,如果需要,使用者项目将覆盖它们

    从可移植性的角度来看,从我的经验中学到的是一件事。对于Nuget的用户来说,运送Nuget软件包并没有神奇地简化。如果要随Nuget软件包提供多个项目DLL,则有以下选项:

  • 一个NuGet包:这意味着在一个NuGet包中打包多个DLL。在这个Nuget包的定义中,使用.nuspec文件显式复制其他项目的DLL

  • 多个Nuget软件包:如果您必须发布多个Nuget软件包,请确保上述场景不会发生。我的意思是,如果项目A和项目B是来自同一解决方案的Nuget包,并且使用的是
    utils.dll
    ,那么utils.csproj应该是.Nuget包,而A.csproj和B.csproj应该将utils.nupkg作为包而不是项目引用。这样,下游的任何消费者都不会对谁负责运输和包装utils.dll感到困惑

  • 您只需将所有内容转换为一个项目,这样它将只生成一个Dll


  • 你能说明你想要实现什么吗?似乎您希望加载2个utils.dll,而它甚至没有强签名。。。这至少在运行时不会发生。。。(通常人们会期望共享库来自单独的共享NuGet…但它根本不像你所寻找的那样)@AlexeiLevenkov实际上不惜一切代价来解决这个问题。如果这意味着应该将utils.csproj转换为utils.nupkg,则可以使用它。经过一番思考,我也同意这是唯一理想的情况。你提出了一个很好的观点。这里的问题是.json文件几乎是不可变的。你认为保持它们的可配置性会有很大的作用吗?