C# 如何获取本机dll';将在基本.net项目中使用的转换为消费项目?

C# 如何获取本机dll';将在基本.net项目中使用的转换为消费项目?,c#,.net,C#,.net,我们有.NET4.7.2(C#)项目“Common”(基本项目),这是由C#项目“API”使用的 API消耗公共资源 我想将Microsoft.ML功能添加到Common中,API将调用Common来实现该功能,但我不想将ML nuget包添加到API中 这应该是好的,因为所有来自公共的dll都应该在构建时复制到API的bin目录中 …但也有一些障碍。看起来,如果Common实际上没有引用引用的dll中的任何类型,那么构建过程将跳过该副本,API也不会在其bin目录中获取dll。需要黑客来解决此

我们有.NET4.7.2(C#)项目“Common”(基本项目),这是由C#项目“API”使用的

API消耗公共资源

我想将Microsoft.ML功能添加到Common中,API将调用Common来实现该功能,但我不想将ML nuget包添加到API中

这应该是好的,因为所有来自公共的dll都应该在构建时复制到API的bin目录中

…但也有一些障碍。看起来,如果Common实际上没有引用引用的dll中的任何类型,那么构建过程将跳过该副本,API也不会在其bin目录中获取dll。需要黑客来解决此问题,详细内容见以下问题的答案:

这里是我的黑客,导致所有依赖的dll被复制到垃圾箱/

// NOTE - this method present so that the build process sees some use of types
// that are in dependant libraries - this causes those libraries to get copied to the bin directory
// of any project that references Domain - e.g. Api, PP etc.
public static void Dummy()
{
    var type = typeof(Microsoft.ML.Trainers.SgdNonCalibratedTrainer);
    Console.WriteLine(type.ToString());
}

…除了缺少本机dll之外,这是可行的。 为了解决这个问题,我将dll作为一个文件添加到项目中,并将“Copy if newer”设置为true

…这太恶心了。。。有更好的办法吗

具体来说,我的问题是nuget包:“Microsoft.ML.CpuMath”。在这个包中有“Microsoft.ML.CpuMath.dll”和“CpuMath.dll”

如何在Api/bin中使用CpuMathNative.dll,而不将其(或任何Microsoft.ML.CpuMath包)添加到Api项目中


这当然是可能的,因为在一个公共项目中封装功能肯定是很正常的。

公共和API之间有什么关系?他们在同一个解决方案中吗?你好,辛特拉-是的,他们是。在我们的环境中,有一些类似的解决方案,其中有一个依赖于“公共”的父项目。我们不想给这些父母中的任何一个添加不必要的包。至于关系,那么“Common”是“API”中的一个项目引用。如果项目在不同的解决方案中,那么您必须正确分发(安装)库,这意味着您需要将托管dll和本机dll打包在一起。Nuget是此类问题的解决方案,您可以尝试将其用于本地项目(请参阅),例如
Common
。然后,
API
将把所有内容都放到它的outputs文件夹中。@Sinatr-谢谢,但是项目都在同一个解决方案中,我们只是尝试使用我们可以使用的microsoft软件包。关键是我们只需要将它们添加到公共项目中。
Common
API
之间有什么关系?他们在同一个解决方案中吗?你好,辛特拉-是的,他们是。在我们的环境中,有一些类似的解决方案,其中有一个依赖于“公共”的父项目。我们不想给这些父母中的任何一个添加不必要的包。至于关系,那么“Common”是“API”中的一个项目引用。如果项目在不同的解决方案中,那么您必须正确分发(安装)库,这意味着您需要将托管dll和本机dll打包在一起。Nuget是此类问题的解决方案,您可以尝试将其用于本地项目(请参阅),例如
Common
。然后,
API
将把所有内容都放到它的outputs文件夹中。@Sinatr-谢谢,但是项目都在同一个解决方案中,我们只是尝试使用我们可以使用的microsoft软件包。关键是我们只需要将它们添加到公共项目中。