标签: assembly-resolution

.NET 4加载与.NET 3.5不同的程序集

迁移到.net 4后,我们开始面对库的问题.假设我们有我们的库MyLib.dll,它引用了Interop程序集Interop.dll.Interop.dll引用了MissingInterop.dll.

所以引用可以显示为: MyLib.dll -> Interop.dll -> MissingInterop.dll

在MyLib.dll中,我们只使用Interop.dll中的部分类,因此我们永远不会调用任何需要MissingInterop.dll的内容,并且在.net 3.5中它运行正常这就是为什么我们不使用MyLib.dll发送MissingInterop.dll.

当我们在.net 4下运行的进程使用MyLib.dll时,应用程序失败,并出现以下异常:

FileNotFoundException:"无法加载文件或程序集'MissingInterop.dll,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.系统找不到指定的文件."

另外我注意到Interop.dll引用了其他缺少的dll但是.net不会尝试加载它们.我发现了差异.MissingInterop.dll中的某些类型用于Interop.dll中的方法参数,而来自其他缺失库的类型仅用作方法返回类型,即在Interop.dll中我可以看到:

  Class C1
     MethodA : void (valuetype [MissingInterop]MissingAssembly.TypeA&)
  Class C2
     get_Status : valuetype[AnotherMissingInterop]AnotherMissingAssembly.TypeB()
Run Code Online (Sandbox Code Playgroud)

和.NET 4尝试加载MissingInterop.dll但不尝试加载AnotherMissingInterop.dll.

.NET 3.5没有尝试加载MissingInterop.dll和AnotherMissingInterop,因为它们没有在执行路径中使用.

我知道.NET 4有新的Fusion,但我没有在任何地方找到这样的突破性变化.有谁知道为什么.NET 4会尝试加载不需要的东西?有没有办法解决这个问题,而无需重新编译代码或添加丢失的文件?

.net exception-handling assembly-resolution assemblyresolve

16
推荐指数
1
解决办法
1011
查看次数

Powershell配置程序集重定向

我有一个自定义.NET程序集与一些PowerShell cmdlet比我用于常见的域相关任务.我刚刚创建了一个新的cmdlet,它引用了第三方库,该库引用了Newtonsoft.Json 4.5.0.0.但是我的其他项目之一使用最新版本的json.net(6.0.0.0).所以在PowerShell Fusion的运行时抛出一个错误,说它无法加载newtonsoft.json 4.5.0.0.

我已经尝试创建一个powershell.exe.config并在其中放置一个程序集重定向:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json", Culture=neutral,     PublicKeyToken=30ad4fe6b2a6aeed/>
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.融合日志确实表明它正在查找这个新的配置文件中的powershell,但它似乎没有拿起重定向.

有点难以解决这里的解决方案.任何线索可能是什么问题?同样的重定向在我的一些商业服务中起作用,否则会出现同样的问题(他们也使用第三方库和json.net 6).

干杯

.net powershell assembly-resolution

15
推荐指数
1
解决办法
3396
查看次数

无法加载文件或程序集'System.Web.Http,Version = 5.0.0.0

将Microsoft.Aspnet.Webapi.Webhost包安装到我的web api项目后,我最终得到以下异常:

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

assembly-resolution nuget-package asp.net-web-api

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

C#:自定义程序集目录

假设我们有一个由一个可执行文件和5个库组成的应用程序.通常所有这些都将包含在一个目录中,并且将从那里加载库.

是否有可能这样做,例如我可以在一个名为Lib的目录中拥有一些库,其余的名为Lib2?这样应用程序目录只包含可执行文件本身,其他程序集将包含在各种逻辑目录中.

我怎样才能做到这一点?我想知道如何加载程序集,以及如何使应用程序的构建将程序集放在正确的目录中.

c# assemblies assembly-resolution

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

程序集引用无法在我们的构建服务器上正确解析

我们使用VS2008 SP1在C#中编码.我们有一个运行Team System Server 2008的服务器,我们将其用于源代码控制,任务等.服务器也是Team Build的构建机器.这已经很好地工作了很长时间.直到目前.当我们尝试构建一个引用一个外部程序集的项目时,我们会收到这些错误消息(通过Team Build,以及物理登录和通过Visual Studio进行常规构建时):

C:\ WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets:警告MSB3246:已解决的文件包含错误的图像,没有元数据或无法访问.无法加载文件或程序集 'C:\ Program Files\Syncfusion\Essential Studio\7.1.0.21\Assemblies\3.5\Syncfusion.XlsIO.Base.dll'或其依赖项之一.该模块应该包含一个程序集清单.

C:\ Program Files\MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets(24,2):错误MSB4062:无法从程序集Microsoft加载"Microsoft.Reporting.RdlCompile"任务. ReportViewer.Common,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a.无法加载文件或程序集'Microsoft.ReportViewer.Common,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该模块应该包含一个程序集清单.确认声明是否正确,以及程序集及其所有依赖项是否可用.

找不到引用的组件"Syncfusion.XlsIO.Base".

这些错误适用于一个有问题的程序集引用的项目.当我尝试构建整个解决方案时,由于这个问题,当然会有更多错误.还有另外两个项目与其他程序集引用具有相同的问题.我有一个VS无法解决的引用程序集列表:

  • Microsoft.ReportViewer.Common
  • Microsoft.ReportViewer.WinForms
  • Syncfusion.Compression.Base
  • Syncfusion.Core
  • Syncfusion.XlsIO.Base

Syncfusion程序集来自第三方组件包.另外两个与Microsoft ReportViewer组件有关.

引用已通过"添加引用"窗口添加到.NET选项卡中,因此我认为没有任何可疑之处.在程序集引用的属性窗口中,Culture,Description,Path,Runtime Version或Strong Name中没有值.版本说0.0.0.0,Resolved是False.我猜很明显,VS无法解析引用.我的问题是为什么??? 我在这个问题上摸不着头脑.这只发生在服务器上,解决方案在我的机器和我的同事机器上构建得很好.我们的机器上的装配参考属性很好.

我试图卸载第三方组件(当然在服务器上),然后然后重新安装.没有帮助.我试图修复VS2008安装.没有帮助.试图从源代码控制中检索早期版本(我知道之前已在服务器上构建),并且我收到了相同的错误消息.我检查了文件权限,一切似乎都是有序的.我的想法已经不多了......

我该如何解决这个问题?

更新16.02.2009:
我试图在我的电脑和服务器上比较 dll的ildasm输出(参见我写的评论),并且在一行中有一个小的区别,对我来说似乎是一个评论.我必须承认,我不明白为什么会有所不同,所以也许有人可以向我解释一下?
我也尝试在服务器上运行病毒扫描.没有帮助.试图 …

c# team-build assembly-resolution

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

在2个.NET程序集中使用相同名称和命名空间的类型

出于好奇,我创建了两个程序集,它们都有一个Class1具有完全相同名称空间(Library1)的class ().然后我创建另一个引用这两个程序集的客户端,并尝试创建一个实例Class1.

毫不奇怪,编译器给出了关于模糊引用的编译错误.有没有办法明确指定我想要使用的程序集中的类型以避免歧义?

注意:我很少知道,如果有的话,在实践中发生.这只是一个关于语言特征的好奇心的问题.

.net c# msbuild namespaces assembly-resolution

12
推荐指数
1
解决办法
4934
查看次数

visual studio express 2012 app.config重映射程序集

不久前我将一个项目从MVC 3转移到了MVC 4.

当我建立时,我得到了消息

1>  No way to resolve conflict between "System.Web.Mvc, Version=3.0.0.0 ..." and , Version=2.0.0.0
1>  Consider app.config remapping of assembly "System.Web.WebPages ..." from Version "1.0.0.0" to Version "2.0.0.0"  to solve conflict and get rid of warning.
1>  Consider app.config remapping of assembly "System.Web.WebPages.Razorfrom Version "1.0.0.0" [c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.Razor.dll] to Version "2.0.0.0" [C:\Users\OEM\documents\visual studio 2012\Projects\DabTrial\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll] to solve conflict and get rid of warning.
Run Code Online (Sandbox Code Playgroud)

等等.

当我查看引用时,它们都是更高版本,而web.config仅引用更​​高版本.当我通过公钥令牌(在Windows资源管理器中)搜索整个解决方案目录时,我找不到引用早期版本的XML类型文件.

显然,文件的路径是不同的,但我找不到编译器被定向到早期.dll文件的路径的位置.

该项目构建并运行良好,但我认为编译器建议这些更改是有原因的.谢谢你的帮助.

assembly-resolution visual-studio-2012

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

如何在ASP.net应用程序中引用bin文件夹之外的程序集?

我有一个用ASP.Net编写的工作XML Web服务.现在我需要引用位于特定文件夹中的某些程序集,例如c:\NotMyCode
不想将该文件夹中的数百万个dll复制/复制到我的bin文件夹中.

我试图保留CopyLocal=falseWeb服务中引用的程序集.最终导致程序集的FileNotFound异常.当我切换到CopyLocal=true,引用的DLL被复制到bin文件夹..它的工作原理.

所以我的问题是:如何引用不在我的bin文件夹或它下面的子文件夹中的程序集?我是否需要在某处更改某些安全策略文件?我想我不是第一个想做这样事情的人......所以我假设有人已经解决了这个问题.

(我已经尝试在IIS ASP.net配置面板中模拟管理员用户,但这也没有用.)

更新:无法将其安装在GAC中.举一个类比,这个Web服务给第三方应用程序提供了一个简化的视图,例如Starteam.我不能(不应该......不想......)将该文件夹中的所有二进制文件复制到bin文件夹或将其安装到GAC中

asp.net assembly-resolution

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

如何在.NET中解决程序集?

如何在.NET中解析程序集.我的意思是,如何解决具有完全限定名称的程序集.我对公钥/私钥令牌和强命名感到困惑.谢谢

编辑:我也读过关于延迟签名和类似的东西.人们真的使用它吗?(有没有人实际使用过延迟签名)谁生成了签署程序集的密钥.如果我问了太多问题,我很抱歉.但是,我对这件事感到困惑.

.net assembly-resolution

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

装配绑定错误:绑定结果:hr = 0x80070002.该系统找不到指定的文件

我有一个Visual Studio 2010解决方案,其中包含一个类库(ProjectA)和两个Sharepoint项目(ProjectB和ProjectC).依赖顺序是ProjectB引用,ProejctA和ProjectC引用ProjectA和ProjectB.

在一台特定的开发机器上,我在尝试构建ProjectC时遇到以下错误:

编译失败.无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.

在查看融合日志时,我注意到以下错误:

*装配活页夹日志条目(14/06/2012 @ 09:38:32)*

操作失败.

绑定结果:hr = 0x80070002.该系统找不到指定的文件.

装配管理器从:C:\ Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll加载

在可执行文件C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe下运行

---详细的错误日志如下.

===预绑定状态信息===日志:用户= DOMAIN \用户名

日志:DisplayName = ProjectB,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = aaaaaaaaaaaaaaa,processorArchitecture = MSIL(完全指定)

日志:Appbase = file:/// C:/ Program Files(x86)/ Microsoft Visual Studio 10.0/Common7/IDE /

日志:初始PrivatePath = NULL

日志:动态Base = NULL

日志:缓存基数= NULL

日志:AppName = devenv.exe

调用程序集:(未知).

日志:此绑定在默认加载上下文中启动.

日志:使用应用程序配置文件:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.Config

日志:使用主机配置文件:

日志:使用C:\ Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config中的计算机配置文件.

日志:政策后参考:ProjectB,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = aaaaaaaaaaaaaaa,processorArchitecture = MSIL …

c# assembly-resolution .net-assembly

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