Nuget NLog 64位

Nuget NLog 64位,nuget,badimageformatexception,Nuget,Badimageformatexception,我有一个asp.net应用程序,使用NLog。我可以成功地在x32平台上运行它。但对于x64平台,我在启动时出错: BadImageFormatException无法加载文件或程序集或其依赖项之一。试图加载格式不正确的程序 我认为,这是由于加载了Nuget的NLog.dll的x32版本。我尝试为x64平台加载带有Nuget的NLog,但总是只得到x32。这是否意味着NLog在repo中没有x64版本的NuGet软件包?而NLog只是一个例子。我的应用程序依赖于许多其他软件包,如NJsonSche

我有一个asp.net应用程序,使用NLog。我可以成功地在x32平台上运行它。但对于x64平台,我在启动时出错:

BadImageFormatException无法加载文件或程序集或其依赖项之一。试图加载格式不正确的程序

我认为,这是由于加载了Nuget的NLog.dll的x32版本。我尝试为x64平台加载带有Nuget的NLog,但总是只得到x32。这是否意味着NLog在repo中没有x64版本的NuGet软件包?而NLog只是一个例子。我的应用程序依赖于许多其他软件包,如NJsonSchema.dll、System.Web.Razor.dll和其他。但它们在Nuget repo中都只有x32版本,为什么?很明显,这是微软的系统包,为什么它没有x64版本? 这是否意味着,我应该只构建我的asp.net应用程序的x32平台

我认为,这是由于加载了Nuget的NLog.dll的x32版本

好,让我们来验证这个假设。首先,我使用
dotnet new console
创建一个新项目,然后我构建了几次,
dotnet build
dotnet build-r win-x86
dotnet build-r win-x64
。然后,我用它来检查DLL。对于
win-x64
build,ILSpy告诉我“//Architecture:x64”。对于
win-x86
build,ILSpy告诉我“//Architecture:x86”。而没有指定运行时的构建,ILSpy告诉我“//Architecture:AnyCPU(64位首选)”

现在,添加NLog作为PackageReference并构建,我在bin目录中得到一个NLog.dll,然后在ILSpy中打开它,我看到“//Architecture:AnyCPU(64位首选)”

因此,我认为NLog不是32位的

如果您觉得这不够有说服力,这是我的程序。主要方法:

static void Main(字符串[]args)
{
var console=new NLog.Targets.ConsoleTarget();
var config=new LoggingConfiguration();
config.AddRule(LogLevel.Info、LogLevel.Fatal、console);
NLog.LogManager.Configuration=config;
var logger=NLog.LogManager.GetCurrentClassLogger();
int bits=Environment.is64位进程?64:32;
Info($“正在运行{bits}-bit进程”);
}
使用
dotnet run
dotnet run-r win-x86
dotnet run-r winx64
运行此程序时,我从未看到崩溃,三次执行中的两次告诉我进程是64位的,其中一次告诉我进程是32位的。因为我使用NLog将其输出到控制台,所以我相信NLog在这两种指令集体系结构中都可以工作

事实上,使用
dotnet build-r linux arm构建,将二进制文件复制到我的Raspberry Pi,我可以在arm CPU上运行这个程序,包括nlog

我尝试为x64平台加载带有Nuget的NLog,但总是只得到x32。这是否意味着NLog在repo中没有x64版本的NuGet软件包

我不知道您是如何得出NLog或其他软件包仅为32位的结论的。我建议您阅读StackOverflow关于如何创建的建议。当我这样做的时候,我常常自己找到问题的解决办法。当我自己找不到解决方案时,我有一个小而简单的例子,其他人可以在自己的机器上运行来验证意外行为,并可以帮助修改它来回答我提出的问题。在任何情况下,我都无法重现您遇到的问题,我希望我的回答能让您确信.NET库(为任何CPU编译)可以在任何指令集上工作