我希望能够在基于.NET 2.0的应用程序中使用.NET 3.5类型。 基本上我们没有在桌面上部署.NET 3.5库,但我们需要从那里使用一些类。任何想法如何可能?在.NET 2.0中使用.NET 3.5类
感谢, 马里奥斯
我希望能够在基于.NET 2.0的应用程序中使用.NET 3.5类型。 基本上我们没有在桌面上部署.NET 3.5库,但我们需要从那里使用一些类。任何想法如何可能?在.NET 2.0中使用.NET 3.5类
感谢, 马里奥斯
这个问题让我想知道,所以我深入了解了一下。
您的问题的答案取决于您对新框架有多少依赖关系,以及您愿意做多少黑客行为。
real最好的答案就是硬着头皮安装必要的框架。但是,如果您只需从.net 3.0发布单个程序集,则可能会发生这种情况。我很确定,要求从3.5开始的程序集需要安装3.0。在这一点上,你没有安装3.5没有任何好处。
这里的黑客我也从2.0制作装配3.0工作:
哈克#1 参考添加到所需要的3.0。 Visual Studio应该抱怨。卸载项目并编辑项目文件。从xml中删除此行并重新加载项目。
<RequiredTargetFramework>3.0</RequiredTargetFramework>
Visual Studio将很高兴地编译并使用此程序集运行。
哈克#2 更改复制本地财产集引用列表为true。
黑客#3(最丑的黑客) 修改机器配置,为所需的程序集添加配置部分。这可能需要,也可能不需要,具体取决于您要使用的程序集。在我的测试中,我引用了System.Runtime.Serialization程序集,并需要将此部分从我的3.5机器上的machine.config复制到我的2.0机器。
<sectionGroup name="system.runtime.serialization" type="System.Runtime.Serialization.Configuration.SerializationSectionGroup, System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="dataContractSerializer" type="System.Runtime.Serialization.Configuration.DataContractSerializerSection, System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
一旦我做到了,下面的代码运行在我的。NET 2.0对箱就好了。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
try
{
Console.WriteLine("Testing serialization");
DataContractSerializer formatter = new DataContractSerializer(typeof(Junk));
MemoryStream stream = new MemoryStream();
Junk junk = new Junk();
junk.Name = "Junk";
junk.Value = 15;
formatter.WriteObject(stream, junk);
Console.WriteLine("Wrote object to stream");
stream.Seek(0, SeekOrigin.Begin);
Junk savedJunk = formatter.ReadObject(stream) as Junk;
Console.WriteLine("Deserialized name = {0}", savedJunk.Name);
Console.WriteLine("Deserialized value = {0}", savedJunk.Value);
Console.WriteLine("Testing complete");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
[DataContract]
class Junk
{
[DataMember]
public string Name = "";
[DataMember]
public int Value = 0;
}
...再次,我不建议这样做。但是,如果你真的绝望,可能会改变规则。
不是。如果你想运行.NET 3.5代码,你需要在一台机器上安装.NET Runtime 3.5。如果您使用2.0部署到机器,您将需要创建不依赖3.5的项目。
以下是关于如何使用VS2008创建针对.NET 2.0的项目的一些信息。
http://weblogs.asp.net/scottgu/archive/2007/06/20/vs-2008-multi-targeting-support.aspx
我听说过从3.5中提取IL的方法类,并重新生成C#代码。不知道这是否属实。 – koumides 2010-01-14 00:26:49
这听起来比解决.NET 2.0上缺少的功能更难。你想要什么LINQ吗?在那种情况下,你被拧紧了。尽管如此,使用别的方法替换它可能会更容易,而不是破解IL(如果甚至可能的话)。 – 2010-01-14 00:33:40
部署到.NET 2.0(SP1)目标时可以使用Linq。有几种可能性,你可以使用LinqBridge(http://www.albahari.com/nutshell/linqbridge.aspx)或http://linqinaction.net/blogs/main/archive/2007/09/05/linq-support-on- net-2.0.aspx – 2010-01-14 00:45:27
你想要什么类型的使用?理论上可以使用某些类型,因为.NET 3.5程序集是为.NET 2.0运行时编译的。但是,请注意,通常.NET 3.5程序集将需要安装.NET 3.5 Framework,因为.NET 3.5中不仅仅是程序集(例如用于WPF的服务),还有更多。
如果你不想部署与应用程序的.NET 3.5框架,我建议你去看看在.NET 3.5客户端配置文件,减少变异,这将是足以满足大多数桌面应用程序。
.NET 3.5没有什么特别的地方,它只是一堆附加的程序集(比如Linq)。相同的.NET 3.0(如WPF)。 .NET框架2.0到3.5 SP1仍使用相同版本的CLR版本2.0。
所以这是一个非常有意识的决定,使您的程序依赖于.NET 3.5,它需要Project + Add Reference并选择一个具有3.5.0.0版本号的程序集。一旦你这样做了,你的客户端需要在她的机器上安装相同的程序集。这需要在其机器上安装.NET 3.5版本的框架。
大多数客户端已经拥有它,它通过Windows Update获得分布。
“这只是一堆程序集”:当然有很多新的程序集(运行时是相同的),但不要忘记,可能还有其他注册表项,COM或本地依赖项或像PresentationFontCache这样的服务要成立。 – 2010-01-14 00:48:19
只要您不使用.NET 3.5功能,您可以将其编译为.NET 2.0。 – ChaosPandion 2010-01-14 00:17:22
完全重复:http://stackoverflow.com/questions/814085/using-net-framework-3-5-features-in-net-framework-2-0/ – 2010-01-14 02:41:25