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

时间:2019-04-09 10:52:26

标签: c# nuget

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

首先安装nuget程序包

我按照以下说明进行操作:

https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks

而且我也在使用.targets和.props文件。

有关代码,请查看Pullrequest开源项目:https://github.com/lucascebertin/Serilog.Sinks.Burst/pull/1

使用nuget程序包

使用Nuget软件包时,一切似乎正常。但是目前,我会进行2次检查以查看是否使用了正确的平台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);

结果是:

  

使用Serilog.Sinks.Burst,版本= 1.0.1.0,文化=中性,   PublicKeyToken = null来自   文件:/// 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版本: enter image description here

我的dist \ build文件夹中的原始构建版本为: enter image description here

所以它们应该是相同的,但是差异:I386与AMD64 ??

我的问题:

  • 运行时C#是否可以使用编译时以外的其他dll?
  • 以上检查是否足够?或者我需要其他检查吗?
  • 确实需要构建所有平台版本,还是MSIL / Any CPU dll足够?

1 个答案:

答案 0 :(得分:1)

除非您的软件包中包含专门针对ARM,x86或x64的程序集,否则通常无需在软件包中包括任何特定于体系结构的文件夹。这通常仅适用于您的C#代码可以包装的本机(非.NET)程序集。

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