Редактировать 3: После дополнительного поиска в Google, похоже, что вы не можете иметь свойство TargetFrameworkMoniker в приложении .NET 3.5.Так что, думаю, мне следует задать другой вопрос.
Как изменить целевую среду с 4.0 на 3.5?К сожалению, я могу только найти материал о том, как пойти другим путем.или еще лучше, как мне программно установить целевую версию фреймворка в проект, отличный от 4.0?
Оригинальный вопрос: я только что перешел на vs2010.У меня есть приложение, которое использует .net 3.5.Он загружает плагины, которые генерируются другим приложением.Плагины используют .net 4 и не могут быть загружены.Я использую EnvDTE.Project, чтобы создать проект и установить настройки.Я не могу найти, какие настройки нужно установить для этого.
Редактировать 1: я генерирую код для примерно 50 решений.Когда я переключился с vs2005 на vs2010, проекты в этих решениях по умолчанию были на .NET Framework 4.0.Поэтому мне нужно установить .NET Framework на 3,5, когда я генерирую код для этих решений.
Редактировать 2: После долгих поисков я нашел это .тогда я попробовал это:
loProp = vsGetProperty("TargetFrameworkMoniker");
vsSetValue(loProp, ".NETFramework,Version=v3.5");
определения этих двух методов приведены ниже.насколько я могу судить, они делают то же самое, что и
project.Properties.Item("TargetFrameworkMoniker").Value = ".NETFramework,Version=v4.0,Profile=Client";
Я начинаю получать исключение недоступности свойства позже в коде.Когда я удаляю новые строки, все работает, за исключением того, что целевая инфраструктура проектов по-прежнему 4.0.
Целевая среда генераторов кода равна 3.5, поэтому я не могу использовать класс FrameworkName, как показано во втором примере в этой ссылке.
вот vsGetProperty
protected Property vsGetProperty(string aProperty)
{
bool lbDone = false;
int liCount = 0;
Property loProp;
while (!lbDone && liCount < pMaxRetries)
{
try
{
loProp = pProject.Properties.Item(aProperty);
lbDone = true;
return loProp;
}
catch (System.Runtime.InteropServices.COMException loE)
{
liCount++;
if ((uint)loE.ErrorCode == 0x80010001)
{
// RPC_E_CALL_REJECTED - sleep half sec then try again
System.Threading.Thread.Sleep(pDelayBetweenRetry);
}
}
}
return null;
}
и vsSetValue
protected void vsSetValue(Property aProperty, string aValue)
{
bool lbDone = false;
int liCount = 0;
while (!lbDone && liCount < pMaxRetries)
{
try
{
aProperty.Value = aValue;
lbDone = true;
}
catch (System.Runtime.InteropServices.COMException loE)
{
liCount++;
if ((uint)loE.ErrorCode == 0x80010001)
{
// RPC_E_CALL_REJECTED - sleep half sec then try again
System.Threading.Thread.Sleep(pDelayBetweenRetry);
}
}
}
}