Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VisualStudio使用来自较新目标框架的程序集_C#_Visual Studio 2012_.net Assembly_Global Assembly Cache - Fatal编程技术网

C# VisualStudio使用来自较新目标框架的程序集

C# VisualStudio使用来自较新目标框架的程序集,c#,visual-studio-2012,.net-assembly,global-assembly-cache,C#,Visual Studio 2012,.net Assembly,Global Assembly Cache,我正在针对目标框架.NETFramework 3.5进行开发。项目记录器使用以下库 Newtonsoft.Json.dll Version = 4.5.0.0 AssemblyFileVersion = 5.0.8.16617 PublicKeyToken = 30ad4fe6b2a6aeed TargetFramework = v3.5 它是项目中的引用程序集 应用程序MyApp具有对Logger项目的项目引用,因此间接引用了Newtonsoft.Json.dll 将Copy Local属性

我正在针对目标框架
.NETFramework 3.5
进行开发。项目
记录器
使用以下库

Newtonsoft.Json.dll
Version = 4.5.0.0
AssemblyFileVersion = 5.0.8.16617
PublicKeyToken = 30ad4fe6b2a6aeed
TargetFramework = v3.5
它是项目中的引用程序集

应用程序
MyApp
具有对
Logger
项目的项目引用,因此间接引用了
Newtonsoft.Json.dll

Copy Local
属性设置为
true
将强制将
Newtonsoft.Json.dll
复制到输出目录。编译
MyApp
还将
Newtonsoft.Json.dll
复制到相应的输出目录中。请注意,GAC中没有
Newtonsoft.Json.dll

到目前为止还不错

现在,我将以下库安装到
.NET Framework 4.0
GAC(
%windir%\Microsoft.NET\assembly
):

将此库安装在GAC for
.NET Framework 4.0
中将导致引用的项目
Newtonsoft.Json.dll
不再复制到
MyApp
的输出目录。但是它仍然被复制到
记录器的输出目录中

我试图向自己解释这种行为:引用的项目
Newtonsoft.Json.dll
被复制到
Logger
的输出目录,因为它的
Copy Local
属性设置为
true

但是我不明白为什么不再将
Newtonsoft.Json.dll
复制到
MyApp
的输出目录。我安装到
.NET Framework 4.0
的GAC上的库(在我看来)对于构建系统来说应该是不可见的,因为我的项目是根据
.NET Framework 3.5
构建的

运行时会出现
System.IO.FileNotFoundException
,因为找不到
Newtonsoft.Json.dll
库(这一点我很清楚,因为库位于4.0 GAC中,而不是
MyApp
使用的GAC 3.5)

  • 为什么目标framework 3.5项目的构建系统知道.NET framework 4.0的GAC中的程序集
  • 当GAC 4.0中存在
    Newtonsoft.Json.dll
    时,如何将目标framework 3.5中引用的本地
    Newtonsoft.Json.dll
    复制到
    MyApp
    的输出目录中

您是否尝试过将参考属性下的特定版本设置为true?我怀疑编译时会首先搜索GAC,因此如果不指定版本,任何版本都将被视为“可接受”,不会导出其他版本

如果您指定了一个版本,那么来自GAC的版本将被视为无效,而另一个版本应该像以前一样导出

更新:我做了一个快速搜索,发现,这实际上意味着你可以用它做任何你想做的事情


因此,您的解决方案可能是自己编译它,使用您需要的任何目标框架和版本号

首先,为什么要在GAC中安装该库?这是行不通的,您必须以.NET 4.5为目标才能使用该版本的Newtonsoft.Json.dll。以.NET3.5为目标是出现问题的地方。该程序集的早期版本也可用,但是您仍然无法使用想要使用4.5版本的记录器程序集。目标3.5要求您使用的所有程序集都可以在v2 CLR上运行。搞乱GAC不是一个解决办法。@HansPassant他提到的程序集的第一个版本似乎是针对3.5(最后一行!)。如果我没有弄错的话,只要他设法使他的应用程序引用正确的版本,那就可以了。
MyApp
Logger
有目标框架
.netframework3.5
,我想使用
Newtonsoft.Json.dll
根据
.netframework3.5
编译。NET 4.0的GAC中目标framework 4.0的
Newtonsoft.Json.dll
是一个场景,当安装程序(针对.NET 4.0编译并使用Json的其他应用程序)在GAC 4.0中安装Json库时,两个库都有
4.5.0.0版
。这是reflector找到的版本信息,此版本信息也由visual studio提供。不同之处在于
AssemblyFileVersion
,但visual studio似乎忽略了这一点。@faronel啊,好的。我没有注意到,在你的作品中。不过我觉得有点奇怪,有不同版本的
Newtonsoft.Json.dll
具有相同的版本号(当它们针对不同版本的.Net framework时,它们怎么可能不不同呢?)。我假设
Newtonsoft
dll不是您自己编译的?(如果是这样的话,你可以自己创建不同的版本来解决这个问题)Newtonsoft.Json.dll库不是我自己编译的。目标框架3.5的版本从下载,并位于zip文件中
/Bin/Net35/Newtonsoft.Json.dll
下,也可以使用另一个版本号编译库。但我想知道为什么这不起作用,因为我的目标框架是3.5,而GAC库的目标框架是4.0.Ok。我想VS只是“假定”没有区别,因为版本号是相同的,因此将您指给GAC。。。
Newtonsoft.Json.dll
Version = 4.5.0.0
AssemblyFileVersion = 4.5.8.15203
PublicKeyToken = 30ad4fe6b2a6aeed
TargetFramework = v4.0