Этот вопрос заставлял меня задаваться вопросом, поэтому я немного впился в него.
Ответ на ваш вопрос зависит от того, сколько зависимостей у вас есть на новых фреймворках и сколько взлома вы готовы делать.
Настоящий Лучший ответ - укусить пулю и установить необходимый каркас. Однако, если вам нужно просто распространять одну сборку из .net 3.0, это может быть возможно. Я уверен, что для сборки с 3.5 потребуется установка 3.0. В этот момент вам нечего выиграть, если не установить 3.5.
Вот хакерство я сделал, чтобы сделать сборку из 3.0 работы от 2,0:
Hack # 1 Добавить ссылку на требуемую 3.0. Visual Studio должна жаловаться. Выгрузите проект и отредактируйте файл проекта. Удалите эту строку из xml и перезагрузите проект.
<RequiredTargetFramework>3.0</RequiredTargetFramework>
Visual Studio будет с радостью компилироваться и работать с этой сборкой сейчас.
Hack # 2 Изменение копия локального свойство в списке ссылок сборки к истине.
Hack # 3 (Ugliest hack) Измените конфигурацию машины, чтобы добавить раздел конфигурации для необходимой сборки. Это может потребоваться или не понадобиться, в зависимости от сборки, в которую вы втягиваете. В своем тесте я ссылался на сборку System.Runtime.Serialization и должен был скопировать этот раздел с machine.config на моем компьютере 3.5 на мой компьютер 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 2.0. – ChaosPandion
Точный дубликат: http://stackoverflow.com/questions/814085/using-net-framework-3-5-features-in-net-framework-2-0/ –