相关疑难解决方法(0)

无法加载文件或程序集或其依赖项之一

我有另一个"无法加载文件或程序集或其中一个依赖项"的问题.

附加信息:无法加载文件或程序集"Microsoft.Practices.Unity,Version = 1.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我不知道是什么导致这个或我如何调试它来找到原因.

我已经在我的解决方案目录.csproj文件中进行了搜索,以及我拥有Unity的所有地方:

参考Include ="Microsoft.Practices.Unity,Version = 2.0.414.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL"

在我的任何项目中找不到任何与1.2.0.0相对应的参考.

任何想法我应该如何解决这个问题?

我也很欣赏如何调试这样的问题的技巧.

.net c# compiler-errors reference

224
推荐指数
16
解决办法
72万
查看次数

如何查找本机DLL文件是否编译为x64或x86?

我想确定本机程序集是否从托管代码应用程序(C#)编译为x64或x86 .

我认为它必须在PE头中的某处,因为OS加载器需要知道这些信息,但我找不到它.当然我更喜欢在托管代码中执行它,但如果有必要,我可以使用本机C++.

.net c# 64-bit winapi x86-64

127
推荐指数
7
解决办法
10万
查看次数

C#编译32/64位,还是任何cpu?

可能重复:
Visual Studio"任何CPU"目标

我注意到在VS中编译C#代码时,通常有编译32/64位系统的选项,还有一个用于编译任何cpu的选项.

这两个选项有什么区别?选择任何CPU只能编译为中间字节代码,而第一个选项编译为机器代码(这听起来不太可能)?或者是其他东西?

.net 64-bit assemblies 32bit-64bit anycpu

68
推荐指数
2
解决办法
6万
查看次数

我已经将Windows服务构建为"任何CPU".为什么它在我的64位机器上以32位模式运行?

我已经将Windows服务构建为"任何CPU".但是,当我在64位机器上运行时,它以32位运行.我该如何解决?我使用的是.NET和C#,我的操作系统是Windows 2008 R2.

如果我在x64中构建它,它会以64位模式正确加载.但是,"Any Cpu" - 这就是我想要的 - 加载32位,即使它运行的机器完全支持64位.

编辑以根据反馈添加更多信息

我们确实有第三方工具以及引用c ++托管程序集.这些可能是也可能不是为任何CPU构建的.事实上我知道c ++托管程序集只是为x86构建的.然而,奇怪的是,如果我专门指定x64,该进程将启动并在x64中工作.如果框架试图加载c ++托管程序集,它将失败.我不介意这一点,因为在代码中,如果我们以64位模式运行,我们不会加载32位托管++程序集.可能是因为构建数据,因为这里有32位程序集,它应该将启动过程(在本例中是一个Windows服务程序集)标记为x86?

.net 64-bit x86 multi-targeting

39
推荐指数
3
解决办法
3万
查看次数

如何在C#项目中使用Scintilla .NET?

我试图在项目中使用Scintilla .NET(我想要一个好的编辑器+语法高亮等).不幸的是,当我在项目中引用二进制文件时,我似乎无法实际使用Scintilla控件.我得到两个不同的错误.

  1. 第一个发生在添加SciLexer.dll作为我的项目的引用时.我收到一条消息: 无法添加对SciLexer.dll的引用.请确保该文件是可访问的,并且它是有效的程序集或COM组件.

  2. 当我尝试使用ScintillaNET.dll中的控件时,会发生第二个错误.如果我尝试将组件拖到表单中,我会收到以下消息:无法创建组件Scintilla.错误消息如下:System.ComponentModel.Win32Exception:%1不是ScintillaNet.Scintilla.get_CreateParams()中的有效Win32应用程序

任何这些问题的帮助将不胜感激.为了记录,我正在运行在64位Windows 7平台上运行的Visual Studio 2008.

谢谢.

.net c# scintilla visual-studio

37
推荐指数
1
解决办法
2万
查看次数

AnyCPU测试程序集从x64生产程序集实现接口时BadImageFormatException

我似乎遇到了一个场景,当我在引用x64程序集的AnyCPU程序集上运行mstest时,我得到一个BadImageFormatException.

当AnyCPUTestingx64Production.dll测试程序集实现x64Production.dll中的接口(即使未使用)时,会出现此问题:

Unable to load the test container 'D:\AnyCPUTestingx64Production.dll' 
or one of its dependencies. error details:
System.BadImageFormatException: 
    Could not load file or assembly 'x64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Run Code Online (Sandbox Code Playgroud)
  • mstest在Windows 7 64位上运行
  • 测试组件建成AnyCPU得到它在64位主机上运行64位(如概述这里)
  • testsettings文件指定<Execution hostProcessPlatform ="MSIL"/>
  • peverify和corflags没有任何有趣的东西
  • 这在玩具解决方案中很容易重现,即在哪里
    • x64Production
      • 没有引用其他组件
      • 仅包含一个空的公共接口IExampleInterface
      • 将<PlatformTarget>设置为x64
    • AnyCPUTestingx64Production
      • 仅引用x64Production.dll(即使没有对Microsoft.VisualStudio.QualityTools.UnitTestFramework的引用,也会出现此问题)
      • 仅包含x64Production.IExampleInterface的空实现
      • 将<PlatformTarget>设置为x64
  • nunit可以加载并运行测试程序集(一旦我转换了所有的测试属性)
    • 但对于较大的问题(涉及大量项目文件)来说,这不是一个很好的短期解决方案
  • 无论项目是3.5还是4.0,都会出现同样的问题
  • 无论是使用VS2008还是VS2010 c#编译器,都会出现同样的问题
  • 无论是使用VS2010的mstest还是使用测试代理,都会出现同样的问题
  • 加载AnyCPUTestingx64Production时mstest失败 - 即尝试在错误的QTAgent中加载程序集时没有问题(进程监视器中没有显示任何内容,重命名QTAgent32.exe没有效果):
    *** Assembly Binder Log Entry  (09/02/2012 @ 09:44:26) …
Run Code Online (Sandbox Code Playgroud)

c# 64-bit mstest visual-studio-2010

24
推荐指数
4
解决办法
3万
查看次数

主动解决方案平台VS Project Platform VS Platform目标

我希望我的应用程序是为x64构建的(因为我使用的是x64 dll).在配置管理器中,我将"Active solution platform"设置为"x64"但是在项目列表Platform中设置为"x86".项目属性中的"平台目标"也设置为"x86"

我完全糊涂了设置目标平台的三个地方:

  • 配置管理器:活动解决方案平台
  • 配置管理器:项目平台
  • 项目属性:平台目标

例如,我可以将Active解决方案平台设置为x64,将Project平台设置为x86,将Project target设置为x64.那意味着什么?

有人可以描述这些选项究竟是什么意思以及它们应该如何一起使用?如何编译到x64?

.net c# visual-studio

21
推荐指数
1
解决办法
9769
查看次数

.Net平台目标优化

我在VS 2010中注意到C#项目的默认平台目标是x86(它曾经是任何CPU),并且想知道为什么要进行更改.

编译器是否基于将平台修复为x86 vs x64 vs任何CPU来执行任何优化?

出于性能原因,我应该将我的应用程序强制转移到一个平台还是另一个平台?

.net c#

13
推荐指数
1
解决办法
1715
查看次数

C#编译为32/64位,或任何cpu益智游戏

这个问题与之前关于SO的问题有关

任何CPU问题1任何CPU问题2

我有一个应用程序,最初是使用Visual Studio 2005在Win XP上构建的(不要笑!).这个应用程序调用我们的win32 C++ DLL.调用C++ dll的C#组件是使用"Any CPU"配置构建的,并且很乐意在Win XP上运行,没有任何问题.

我们现在转向Win 7,我们的应用程序的发布版本(使用VC 2005构建在Win XP上)运行良好.然而,随着win 7向我们的用户推出,我们现在已经采取了机会转移到VS 2010并且我已经使用VC 2010在win 7上构建了C#组件,但是现在运行这个版本时我得到很多"无法加载abc. dll"其中abc.dll是我们的win32 c ++组件.

我知道用x86配置重新编译C#程序集将解决问题,但我不明白的是,使用Win-XP/Visual studio 2005(任何CPU配置)构建的发行版c#程序集如何能够在Win 7上运行任何问题?当然,这些使用"任何CPU"构建的C#程序集在Win 7中加载时应该JIT到64位代码并导致BadImageFormatException或其他错误,因为它们调用Win32 C++ dll.


更新:我在下面的评论中提供了更多信息.

  1. 在我的Windows 7机器上,我右键单击我的计算机并查看属性.系统信息显示"系统类型:64位操作系统",确认这是一个Win64操作系统.

  2. 在Windows XP上打开VC2005中的解决方案在查看解决方案的配置管理器时,我可以确认所有 C#项目都是平台类型"任何CPU".

  3. 在64位Win 7机器上运行发布版本(在VC2005/win xp上完成)时,我的任务管理器将图像名称显示为"Test.exe*32",这确认它是jit'd并加载到32位进程中.

c#

10
推荐指数
1
解决办法
3420
查看次数

对于32位或64位的构建感到困惑

我有一个带有几个项目的VS2013解决方案(C#WPF应用程序和类库).每个项目的"平台目标"都设置为"任何CPU".我的印象是,最终的EXE将在64位PC上运行为64位应用程序,在32位PC上运行32位应用程序.它是否正确?我的开发PC是64位,但是当我运行应用程序(独立或通过VS调试)时,它在任务管理器中显示为"foo.exe*32".这里发生了什么?

我们有一个拥有32位机器的初级开发人员.他还能打开解决方案并在VS中运行吗?

此外,某些项目引用了第三方DLL.供应商提供32位和64位版本 - 项目应引用哪一个?如果我引用32位DLL将阻止应用程序作为64位应用程序运行?如果我引用64位版本,这会给32位开发人员带来问题吗?那么最终用户呢 - 我的安装程序是否需要检查操作系统版本并复制相应的DLL?

最后,通过NuGet引用的DLL怎么样?NuGet是否安装了32位或64位版本的DLL?如何处理32位或64位最终用户安装?

c# visual-studio

10
推荐指数
1
解决办法
2265
查看次数