我正在尝试使用SocketIO4Net在.net中创建socket.io客户端.看来SocketIO4Net依赖于Newtonsoft.Json> = 4.0.8.我也使用PushSharp库,其Newtonsoft.Json依赖关系> = 4.5.10.当我第一次安装PushSharp时,我得到了NewtonSoft.Json 4.5.11,我认为这个版本也应该支持SocketIO4Net,因为它的版本更高,但每次尝试连接socket.io服务器时都会收到此错误.
无法加载文件或程序集'Newtonsoft.Json,Version = 4.0.8.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我一直在为这些依赖性问题敲打我的脑袋,如果有人能指出我正确的方向,我将非常感激.
MyClassLibrary).ThirdPartyClassLibrary).ThirdPartyClassLibrary我的用户相同的版本.例如,如果我在ThirdPartyClassLibrary用户中设置静态值,则需要查看该更改.ThirdPartyClassLibrary.ThirdPartyClassLibrary 很大,我不想用我的软件分发它.ThirdPartyClassLibrary并验证了我将使用它们做的事情在所有版本中是兼容的(接口是相同的,方法签名是相同的,等等).ThirdPartyClassLibrary才能保持高效!每次我需要打电话时,我都无法反思一切.MyClassLibrary 将在运行时加载,所以我不能指望用户搞乱程序集绑定重定向或其他开发时间设置(或任何设置,我的用户都无法做任何事情).我如何编写MyClassLibrary这样的信息,当它加载到进程中时,无论ThirdPartyClassLibrary用户加载了哪个版本,一切都能正常工作?
由于各种原因,我宁愿不在我的项目中使用强名称(签名)程序集.但是,其中一个项目由sharepoint Web部件引用,这意味着它必须签名.
是否可以对此程序集进行签名,但是当我从其他项目引用它时,使用非强引用来执行此操作.这将给我的优势是为我的其余代码提供一个非签名程序集,但仍然允许它由sharepoint加载.
我的应用程序包含对外部库(SQL Server管理对象)的引用.显然,如果运行时系统中不存在该库,则只要没有调用使用此库中的类的方法,应用程序仍然可以工作.
问题1:这是指定行为还是CLR加载库的方式(幸运)副作用?
要检测引用是否可访问,我目前使用如下代码:
Function IsLibraryAvailable() As Boolean
Try
TestMethod()
Catch ex As FileNotFoundException
Return False
End Try
Return True
End Function
Sub TestMethod()
Dim srv As New Smo.Server() ' Try to create an object in the library
End Sub
Run Code Online (Sandbox Code Playgroud)
它有效,但似乎很难看.注意如果TestMethod的是一个单独的方法,它才能正常运行,否则异常将在抛出开头的IsLibraryAvailable(在try-catch之前,即使对象实例化try-catch块内occurrs).
问题2:有更好的选择吗?
特别是,我担心函数内联等优化可能会阻止我的代码工作.
所以这就是问题所在.我正在写一些StyleCop插件组件,供我工作的公司使用.因此,这些程序集需要引用Microsoft.StyleCop.CSharp.dll,例如强名称.
问题在于,如果我构建它并将其传递给我的组中的开发人员,则它们必须具有相同版本的StyleCop dll(当前为4.3.3.0)或者无法加载.
使我的附加规则DLL更独立的最佳方法是什么?我应该在GAC中安装我的4.3.3.0版本的那些从属StyleCop dll吗?程序集(与应用程序)可以使用策略文件吗?
哦,其中一个主要问题是我希望它可以与客户安装的任何版本的StyleCop(或至少4.3.3.0或更高版本)一起使用.
提前谢谢了.
c# ×4
.net ×2
assemblies ×2
.net-3.5 ×1
c#-5.0 ×1
dependencies ×1
json.net ×1
nuget ×1
reference ×1
socketio4net ×1
stylecop ×1
versioning ×1