标签: assembly-resolution

无法使用ASP.NET(MVC 4)Web API OData Prerelease加载文件或程序集System.Net.Http,Version = 4.0.0.0

问题

安装Microsoft ASP.NET Web API OData包5.0.0-rc1预发布后,我最终得到以下异常:

无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我的MVC 4项目是全新的,非常小,没什么特别之处.我的目标是.NET framework 4.5

我需要这个nuget包使用Delta类实现PATCH (当我使用包的版本4.0.0.0时,Delta类不起作用).

我该如何解决这个问题?

我的System.Web.Http版本

GAC中,我有System.Web.Http的5.0.0.0

gacutil -l System.Web.Http全局程序集缓存包含以下程序集:System.Web.Http,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL

Visual Studio中,当我浏览程序集时,System.Web.Http的给定版本是4.0.0.0(为什么?)

我的项目中,对System.Web.Http的引用

  • 版本是5.0.0.0
  • 指向包的\ lib \net45 \文件夹
  • CopyLocal = true

我试过的事情

我试图在Web.config中将redirect v 4.0.0.0绑定到5.0.0.0

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

但它给了我另一个例外:

通过方法'System.Web.Http.GlobalConfiguration..cctor()'尝试访问字段'System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2'失败. …

assembly-resolution odata asp.net-mvc-4 asp.net-web-api

81
推荐指数
5
解决办法
15万
查看次数

在没有安装Visual Studio的计算机上使用FUSLOGVW.EXE

我目前在开发服务器上遇到了一些程序集绑定问题.我想用Fusion Log Viewer进一步研究这个问题.由于计算机上没有安装Visual Studio,因此我将FUSLOGVW.EXE复制到本地文件夹并在那里启动它.

这是应该工作还是需要其他东西?我没有得到应用程序记录任何失败的印象(是的,我有正确的设置).

.net assembly-resolution fusion-log-viewer

67
推荐指数
5
解决办法
5万
查看次数

无法从程序集加载"SlowCheetah.Xdt.TransformXml"任务

在我的解决方案中将Slow Cheeath(v.2.5.10.3)安装到两个项目之后,我收到以下错误:

"The "SlowCheetah.Xdt.TransformXml" task could not be loaded from the assembly C:\Users
\User\AppData\Local\Microsoft\MSBuild\SlowCheetah\v2.5.10.2\SlowCheetah.Xdt.dll. Could 
not load file or assembly 'file:///C:\Users\User\AppData\Local\Microsoft\MSBuild
\SlowCheetah\v2.5.10.2\SlowCheetah.Xdt.dll' or one of its dependencies. The system cannot 
find the file specified. Confirm that the <UsingTask> declaration is correct, that the 
assembly and all its dependencies are available, and that the task contains a public 
class that implements Microsoft.Build.Framework.ITask.  ISA.IMPD.FalseAlarm.Web.Portal"
Run Code Online (Sandbox Code Playgroud)

我已完全删除了两个项目(与Slow Cheetah一起),重新安装了两个项目(以及Slow Cheetah),并重建解决方案无济于事.任何人都可以帮助解决这类错误吗?

dependencies assembly-resolution nuget-package slowcheetah visual-studio-2012

47
推荐指数
4
解决办法
2万
查看次数

AppDomain.CurrentDomain.AssemblyResolve要求<AppName> .resources程序集?

使用代码如何将附属程序集嵌入到 csharptest.net提供的EXE文件中,我创建了一个自定义程序集解析程序并在我的资源中嵌入了我的程序集.

我可以成功解析我使用的程序集,但不知怎的,AppDomain.CurrentDomain.AssemblyResolve请求一个名为'AppName.resources'的程序集,特别是"MyProgram.resources,Version = 0.15.3992.31638,Culture = en-US,PublicKeyToken = null"不知道如何解决?

我试图禁用从资源加载我的自定义程序集(将所有程序集dll放在程序目录中)并启用AppDomain.CurrentDomain.AssemblyResolve,但它仍然要求它.

我对此感到有点困惑,如果你可以帮助我,我会非常感激.

这是我感兴趣的代码;

static Assembly ResolveAssemblies(object sender, ResolveEventArgs args)
{
    Assembly assembly = null;
    string name = args.Name.Substring(0, args.Name.IndexOf(','));
    if (name == "MyProgram.resources") return null;
    else name = string.Format("MyProgram.Resources.Assemblies.{0}.dll", name);

    lock (_loadedAssemblies)
    {
        if (!_loadedAssemblies.TryGetValue(name, out assembly))
        {
            using (Stream io = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
            {
                if (io == null)
                {
                    MessageBox.Show("MyProgram can not load one of it's dependencies. Please re-install the program", string.Format("Missing Assembly: {0}", name), MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Environment.Exit(-1); …
Run Code Online (Sandbox Code Playgroud)

c# assemblies assembly-resolution

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

帮助调试的提示"无法加载文件或程序集X或其依赖项之一"

我正在寻找有助于调试应用程序负载问题的提示/建议/见解; 无法加载文件或程序集 ......

该解决方案/项目中,我遇到这个问题是在Visual Studio 2008中的工作拷贝到Visual Studio 2010发布候选转换.转换过程似乎是成功的,所有解决方案项目都设置为框架4.

例外是第三方组件(图形处理库),但任何答案都可能帮助其他人解决任何麻烦的DLL.

无法加载文件或程序集"Aurigma.GraphicsMill.DLL"或其依赖项之一.不是有效的Win32应用程序.(HRESULT异常:0x800700C1)

这个异常令人困惑的是附加文本:不是有效的Win32应用程序.

PasteBin上有完整的异常堆栈跟踪,但似乎没有对这个问题有更多的了解......

到目前为止我没有尝试过什么:

  1. 简单清理,重建,重新启动Visual Studio 2010 RC的组合.
  2. 删除并重新添加有问题的DLL.
  3. 在有问题的DLL上将"copy local"切换为true和false.
  4. 确认在"成功构建"之后,有问题的DLL出现在bin\debug文件夹中.
  5. 检查对相关DLL的任何不必要的引用(没有找到).
  6. 相关DLL的相关许可文件与其位于同一目录中.

在应用程序负载上遇到任何调试器断点时,我也没有运气.

.net exception visual-studio-2010 assembly-resolution

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

BindingRedirect到不同的程序集名称

您可以使用BindingRedirect将YourAssembly.dll 1.1.0.0重定向到1.2.0.0.

有没有人知道如果程序集名称不同,是否可以这样做.

例如

YourAssembly1.dll(v1.1)重定向到YourAssembly2.dll(v2.8)

.net assembly-resolution assemblybinding

23
推荐指数
2
解决办法
3884
查看次数

调试错误"类型'xx'在未引用的程序集中定义"

完整错误如下:

类型'System.Windows.Forms.Control'在未引用的程序集中定义.您必须添加对程序集'System.Windows.Forms,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.

它指向库项目中第一个类中的第一个语句(Debug.Assert行),它不需要System.Windows.Forms(或者我认为).我知道如何解决它:添加提到的参考.但是,我如何找出导致此错误的库,或者更好的是,使用WinForms库触发了哪些代码?

通常,您可以添加引用其他库的库,但只需在实际使用时添加对其他库的引用.


编辑:替代解决方案

使用Microsoft框架工具中的绑定日志查看器Fuslogvw.exe也可以解决此问题或类似问题.它显示了应用程序绑定的程序集的所有尝试和成功.

c# debugging assembly-resolution visual-studio-2008

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

在不重新编译项目的情况下升级C#项目中的引用dll

我需要使用C#应用程序的内置版本并更改其中一个引用dll.最好的方法是什么,我在参考dll上关闭了特定版本,但是当我测试用新版本替换dll时,我得到"无法加载文件或程序集XXXXX,版本= XXXXX.是有一种方法可以阻止加载器关心dll的版本,这样dll只会尝试加载?

c# dll reference version assembly-resolution

19
推荐指数
1
解决办法
8659
查看次数

解决程序集的异常:尝试使用fixup加载无法验证的可执行文件

我正在将所需的程序集嵌入到我的项目中,并在运行时使用AppDomain.CurrentDomain.AssemblyResolve事件解析它们.

一切正常,除了irrKlang的.net4-wrapper,如果我这样做会引发异常;

System.IO.FileLoadException: Attempt to load an unverifiable executable with fixups (IAT with more than 2 sections or a TLS section.) (Exception from HRESULT: 0x80131019)
   at System.Reflection.RuntimeAssembly.nLoadImage(Byte[] rawAssembly, Byte[] rawSymbolStore, Evidence evidence, StackCrawlMark& stackMark, Boolean fIntrospection, SecurityContextSource securityContextSource)
   at System.Reflection.Assembly.Load(Byte[] rawAssembly)
   at xyz.Utility.Helpers.AssemblyManager.Resolver(Object sender, ResolveEventArgs args) in C:\Users\shalafi\Desktop\xyz\trunk\xyz\Utility\Helpers\AssemblyManager.cs:line 55
   at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)
Run Code Online (Sandbox Code Playgroud)

基本上我怀疑CLR 无法使用Assembly.Load(byte [])加载混合模式程序集,虽然我不确定.

我无法找到与异常消息相关的任何内容;

尝试使用fixups加载无法验证的可执行文件(IAT包含2个以上的部分或TLS部分.)

帮助赞赏.

c# assembly-resolution

19
推荐指数
1
解决办法
8761
查看次数

重定向装配绑定是否适用于使用测试运行器进行单元测试?

好的,所以这里是我遇到的问题的完整描述:

我正在尝试使用NUnit ExtensionMethods,但每当我使用TestDriven.Net运行包含一个扩展方法的测试时,或者如果我只是试着使用测试运行器GUI(Icarus或NUnit)加载程序集,我会得到一个FileNotFoundException.

把头撞在墙上并进一步挖掘我想我知道什么是错的.提示反射器和是的,我可以看到NUnit.Framework> ExtensionMethods.dll有一个引用

nunit.framework, Version=2.4.6.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
Run Code Online (Sandbox Code Playgroud)

我现在包含的nunit版本是

nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
Run Code Online (Sandbox Code Playgroud)

现在我以前从未使用过程序集重定向,但似乎只需添加一个App.Config就可以了:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding  xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity
                    name="nunit.framework.dll"
                    publicKeyToken="96d09a1eb7f44a77" />
                <bindingRedirect oldVersion="2.4.6.0" newVersion="2.4.8.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我的理解是,对2.4.6版本(本机上不存在)的调用应自动重定向到2.4.8版本.

但这不起作用,我怀疑(但尚未确认)这是因为测试运行器不会自动读取app.config文件.

所以我的问题如下:

  1. 我对这个问题的诊断是对的吗?

  2. 程序集重定向是适当的解决方案,我做得对吗?

  3. 如何让它与测试运行器一起使用?

.net unit-testing assembly-resolution

17
推荐指数
1
解决办法
7151
查看次数