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