gpt4 book ai didi

c# - 在 .NET 2.0 中使用 .NET 3.5 类

转载 作者:太空宇宙 更新时间:2023-11-03 19:35:15 24 4
gpt4 key购买 nike

我希望能够在基于 .NET 2.0 的应用程序中使用 .NET 3.5 类型。基本上我们没有在桌面上部署 .NET 3.5 库,但我们需要使用那里的一些类。知道这是怎么可能的吗?

谢谢,马里奥

最佳答案

这个问题让我很疑惑,所以我深入研究了一下。

您问题的答案取决于您对新框架的依赖程度,以及您愿意进行多少黑客攻击。

真正最好的答案是硬着头皮安装必要的框架。但是,如果您只需要分发 .net 3.0 中的单个程序集,则可能是可行的。我很确定,需要 3.5 的程序集将需要安装 3.0。到那时,您不安装 3.5 将一事无成。

这是我为使 3.0 中的程序集在 2.0 中工作而进行的黑客攻击:

技巧 # 1添加对所需 3.0 的引用。 Visual Studio 应该提示。卸载项目并编辑项目文件。从 xml 中删除此行并重新加载项目。

<RequiredTargetFramework>3.0</RequiredTargetFramework>

Visual Studio 现在可以愉快地编译和运行这个程序集。

技巧 # 2将程序集引用列表中的copy local 属性更改为 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;
}

...同样,我不推荐这个。但是,如果您真的很绝望,也可以违反规则。

关于c# - 在 .NET 2.0 中使用 .NET 3.5 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2061322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com