如何检查我的C#应用程序是否使用nuget软件包中正确的特定于平台的dll?

如何检查我的C#应用程序是否使用nuget软件包中正确的特定于平台的dll?,c#,nuget,C#,Nuget,我正忙于添加对多个.net框架和平台的支持。不同的框架似乎可以工作。但是如果使用了正确的特定于平台的dll,我真的不知道如何检查它。现在似乎总是使用MSIL/任何CPU版本 首先是nuget软件包 我遵循以下描述: 我还使用.targets和.props文件 有关代码,请参阅Pullrequest开源项目: 使用nuget软件包 使用Nuget包时,一切似乎都正常。但目前我做了两次检查,看看是否使用了正确的平台dll。 注意:平台选择是MSIL/任何CPU、x86和x64 我在包中的dll和正

我正忙于添加对多个.net框架和平台的支持。不同的框架似乎可以工作。但是如果使用了正确的特定于平台的dll,我真的不知道如何检查它。现在似乎总是使用MSIL/任何CPU版本

首先是nuget软件包

我遵循以下描述:

我还使用.targets和.props文件

有关代码,请参阅Pullrequest开源项目:

使用nuget软件包

使用Nuget包时,一切似乎都正常。但目前我做了两次检查,看看是否使用了正确的平台dll。 注意:平台选择是MSIL/任何CPU、x86和x64

我在包中的dll和正在使用项目的bin文件夹中提取/复制的dll之间做了一个区分:看起来MSIL/任何CPU dll版本都被复制了

第二个检查来自代码,以查看在运行时使用了哪个dll:

   var oraSinkAsm = Assembly.GetAssembly(typeof(Serilog.Sinks.Burst.Burst<>));
    Console.WriteLine("Using {0} from {1}", oraSinkAsm.FullName, oraSinkAsm.CodeBase);
    Console.WriteLine("Location: {0}", oraSinkAsm.Location);
var oraSinkAsm=Assembly.GetAssembly(typeof(Serilog.Sinks.Burst.Burst));
WriteLine(“使用来自{1}的{0}”、oraSinkAsm.FullName、oraSinkAsm.CodeBase);
WriteLine(“位置:{0}”,oraSinkAsm.Location);
结果是:

使用Serilog.Sinks.Burst,版本=1.0.1.0,区域性=中性, PublicKeyToken=null自 file:///C:/Develop/Serilog.Sinks.Oracle/src/Serilog.Sinks.Oracle/Serilog.Sinks.Oracle.ConsoleTester/bin/x64/Release/net452/Serilog.Sinks.Burst.DLL 地点: C:\Develop\Serilog.Sinks.Oracle\src\Serilog.Sinks.Oracle\Serilog.Sinks.Oracle.ConsoleTester\bin\x64\Release\net452\Serilog.Sinks.Burst.dll

因此,上面的bin\x64\Release\net452\Serilog.Sinks.Burst.dll看起来是MSIL版本:

my dist\build文件夹中的原始生成版本为:

所以它们应该是相同的,但状态不同:I386和AMD64

我的问题是:

  • 运行时C#是否可以使用compiletime以外的其他dll
  • 以上检查是否足够,或者我是否需要其他检查
  • 是否真的需要构建所有平台风格,或者MSIL/任何CPU dll是否足够

通常不需要在包中包含任何特定于体系结构的文件夹,除非它包含任何专门针对ARM、x86或x64的程序集。这通常只适用于C#代码可能包装的本机(非.NET)程序集


如果您的包只包含托管程序集,最常见的做法是在发布模式下针对任何CPU进行构建。

您的包是否包含任何特定于本机体系结构的程序集?如果没有,您就不需要在包中包含任何运行时文件夹。谢谢您的观点!所有程序集都是托管代码,但为不同的平台目标生成。我需要这个来提高性能和/或效率吗?如果你问,你很可能不需要。最常见的做法是在发布模式下针对任何CPU进行构建。