我希望能够在基于.NET 2.0的应用程序中使用.NET 3.5类型。 基本上我们没有在桌面上部署.NET 3.5库,但我们需要从那里使用一些类。任何想法如何可能?
谢谢, 马里奥斯
答案 0 :(得分:2)
您想使用哪种类型?理论上可以使用某些类型,因为.NET 3.5程序集是为.NET 2.0运行时编译的。但是,请注意,通常.NET 3.5程序集将需要安装.NET 3.5 Framework,因为.NET 3.5中的内容多于程序集(例如WPF服务等)。
如果您不想在应用程序中部署.NET 3.5 Framework,我建议您查看 .NET 3.5客户端配置文件,这是一个简化的变体,足以满足您的要求。大多数桌面应用程序。
答案 1 :(得分:2)
这个问题让我感到疑惑,所以我稍微挖了一下。
您的问题的答案取决于您对新框架的依赖程度,以及您愿意做多少黑客攻击。
真正的最佳答案是咬紧牙关并安装必要的框架。但是,如果您只需要从.net 3.0分发单个程序集,则可能。我很确定,要求3.5的程序集需要安装3.0。此时,如果不安装3.5,则无济于事。
这是我从3.0开始从3.0工作组装的黑客行为:
Hack#1 添加对所需3.0的引用。 Visual Studio应该抱怨。卸载项目并编辑项目文件。从xml中删除该行并重新加载项目。
<RequiredTargetFramework>3.0</RequiredTargetFramework>
Visual Studio现在很乐意使用此程序集进行编译和运行。
Hack#2 将程序集引用列表中的复制本地属性更改为true。
Hack#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;
}
再次,我不推荐这个。但是,如果你真的很绝望,可能会改变规则。
答案 2 :(得分:1)
完全没有。如果要运行.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 :(得分:1)
.NET 3.5并没有什么特别之处,它只是一堆添加的程序集(如Linq)。 .NET 3.0(如WPF)也是如此。 .NET frameworks 2.0到3.5 SP1仍然使用相同版本的CLR 2.0版。
因此,非常有意识地决定使您的程序依赖于.NET 3.5,它需要Project + Add Reference并选择具有3.5.0.0版本号的程序集。一旦这样做,您的客户端需要在她的机器上安装相同的程序集。这需要在她的机器上安装.NET 3.5版本的框架。
大多数客户已经拥有它,它由Windows Update分发。