小编Fal*_*der的帖子

Newtonsoft Json.NET版本不兼容(DLL地狱)

Newtonsoft.Json发布具有相同强名称的不兼容版本,仅更改文件版本.

根据MSDN:

具有相同强名称的程序集应该相同.

因此,如果我们无法控制的其他应用程序将不同版本的Newtonsoft.Json.dll放入GAC,我们的应用程序就会中断.

有没有办法强制.NET加载我们需要的特定版本?

更新:

让我更深入地解释这个问题:

在.NET中,据我所知,在CLR尝试解决它们并失败之前,没有机制来解析程序集.

只有AppDomain.AssemblyResolve事件,它仅在未解析程序集时触发.通常它就足够了.

但是在Newtonsoft.Json的情况下,它并没有解决程序集,但它只是加载错误的程序集.

发生这种情况是因为Newtonsoft.Json发布了具有相同强名称的不兼容版本.

例:

假设我们的应用程序针对NJdll编译(程序集版本1.0,文件版本1.0)

然后一些其他应用程序,将其他不兼容版本的相同dll放入GAC NJdll(程序集版本1.0,文件版本1.1)

因为它们只更改文件版本而不更改程序集版本,所以这两个程序集具有相同的强名称.

因此,对于我们的应用程序.NET尝试解析NJdll(程序集版本1.0),它会在GAC中看到dll并加载它.(因为.NET总是喜欢从GAC组装来装配"bin"文件夹)

但装载的装配是错误的.它的文件版本为1.1,与1.0版本不兼容.

因为两个程序集都具有相同的程序集版本,所以.NET看不到它们之间的任何差异.但是当它实际上尝试解决内部的某个类或成员时,它会失败,因为它在版本1.1中已更改.

并且整个应用程序因不可预测的错误而失败.

最糟糕的是,即使我的应用程序没有将newtonsoft.json.dll放入GAC,我控制之外的其他一些应用程序也会将不同版本的newtonsoft.json.dll放入GAC - 我的应用程序会因不可预测而中断例外.

所以我的问题是,在.NET加载错误之前,我可以首先加载正确的程序集吗?

更新

https://github.com/JamesNK/Newtonsoft.Json/issues/615 https://github.com/JamesNK/Newtonsoft.Json/issues/1001

这个问题的问题已经结束,评论显示Newtonsoft.Json的作者不了解.NET版本以及为什么这很重要.

.net versioning json.net global-assembly-cache .net-assembly

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

更改实体框架将字符串连接到服务器

这是我到目前为止:

    <add name="gymEntities1" connectionString="metadata=res://*/DateModel.csdl|res://*/DateModel.ssdl|res://*/DateModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=gym;user id=sa;password=xxxx;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

它适用于我的LocalHost数据库,我可以从中加载我的数据.但是,我有一个服务器,安装sqlserver与我的数据库,基本上,当我改变我的sqlcommands连接字符串这项工作但在我的程序的一些部分我使用实体框架,不知道如何更改它连接字符串,与一些帖子在stackoverflow中我改变它

    <add name="gymEntities2" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:46.105.124.144;initial catalog = gym ;User ID=sa;Password=xxxx&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

但它仍然从我的localhost读取数据,而不是连接到我的服务器.我不知道当我将这个连接字符串更改为我的服务器时,它仍然从我的localhost数据库中读取数据.

从App.Config更改连接字符串的最佳方法是什么?

c# wpf server

7
推荐指数
1
解决办法
163
查看次数

我可以创建超链接来浏览Visual Studio文件吗?

在设计时,特别是在已经打开许多文件和窗口的情况下,将代码跳回到调用方,反之亦然。

如何在代码或注释中创建超链接以在Visual Studio文件中导航?例如这样:

// vs://CallingClassName.cs#methodeName()
// some further comments
Class AService1 {
}
Run Code Online (Sandbox Code Playgroud)

hyperlink visual-studio

3
推荐指数
1
解决办法
598
查看次数

失去了继承和多态性

我如何重构或重构我的代码,以便我可以使用嵌入和继承的对象以最少的代码重复按预期工作.这段代码只是一个例子,我认为这是我的OOP思考中的一个基本错误......

这个例子与Car和Engine以及Driver等书籍中的几乎所有常见基类相同:当我添加从基类继承的特殊类,如Racecar:Car和TurboEngine:Engine并将属性添加到专用类,如boost to TurboEngine I当我想使用基类中的代码和方法而不覆盖几乎所有方法时,会遇到同样的问题.

我已经重构我的字段属性和与尝试newoverride,但逻辑问题保持不变.

如果该代码太多,我可以尝试将其缩短到我遇到的单个问题.

考试代码显示了问题.上/下铸造无济于事.我想这更像是一个基本的思维错误,因为OOP编程很难为一个旧的汇编程序人学习.

编辑----更新:

好吧,这是设计的. https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science) https://en.wikipedia.org/wiki/Liskov_substitution_principle

我觉得现在有点失去了...坚持在那里思考:不可能是真的.根据开发人员的经验水平,应该有更多地方指出,收集和演示这些常见错误.在许多书中,它还远未突出显示.现在知道它的正确用语,我发现更多.但仍有许多深入的技术解释不适合新手.这可以节省很多时间:)

var root = new Vector2D(0,0);

GameField2D fGame = new GameField2D(10,10);
fGame.Init();
fGame.Field[1,1].ParentPoint = root;

fGame.Field[1,1].Color = 1; //<--ERROR to be expected
var test = (TetrisField2D)fGame; //<---ERROR cast not possible

TetrisField2D fTetris = new TetrisField2D(10,10);
fTetris.Init();
fTetris.Field[1,1].ParentPoint = root; //<--ERROR Nullreference because only base class field is initiated.
Run Code Online (Sandbox Code Playgroud)

以下是课程:

继承的:

public class TetrisField2D: GameField2D {
    public int Lifes;
    public TetrisPoint[,] Field; //I …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism inheritance casting

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

我可以通过Microsoft远程桌面为Azure Win Server VM提供本地网络摄像头访问吗?

我正在Windows Server Azure VM上开发一个VS网站,并通过Microsoft Remote Desktop for Mac进行远程处理.该网站需要访问网络摄像头,但我在远程Windows服务器上没有任何网络摄像头!

有没有办法允许我正在开发的远程Windows服务器通过Microsoft远程桌面查看我的本地网络摄像头,因为我的本地计算机是Macbook Air?

也许还有另一款适用于Mac的远程工具可以实现这一目标吗?我需要付钱吗?

查看适用于Mac版本10.2.4的Microsoft远程destop的设置如何设置USB连接的本地资源?我甚至没有看到Usb设备的选项,只有打印机,剪贴板和智能卡.

我看到的只有以下内容,没有USB连接选项

在此输入图像描述

macos webcam rdp azure windows-server-2012

-1
推荐指数
1
解决办法
256
查看次数