我正忙于添加对多个.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版本:
所以它们应该是相同的,但是差异:I386与AMD64 ??
我的问题:
答案 0 :(得分:1)
除非您的软件包中包含专门针对ARM,x86或x64的程序集,否则通常无需在软件包中包括任何特定于体系结构的文件夹。这通常仅适用于您的C#代码可以包装的本机(非.NET)程序集。
如果您的软件包仅包含托管程序集,那么最常见的做法是针对发布模式下的任何CPU进行构建。