Создана (по шаблону T4) несовместимость времени выполнения dll после обновления Visual Studio 2010 - PullRequest
2 голосов
/ 10 марта 2011

Мы только что перевели наш основной проект с Visual Studio 2008 на 2010 год. Я надеялся, что все будет гладко, как и во всех других, которые я конвертировал ранее, но с этим не было дела ...

В проекте есть шаблон T4, который читает файл xml с регулярными выражениями и компилирует их в dll (с Regex.CompileToAssembly), который включен в наше решение. После преобразования решения сгенерированная dll имеет цель 4.0, поэтому на нее нельзя ссылаться из нашего проекта 3.5 (время выполнения 2.0).

Я пробовал это безуспешно:

<#@ template language="C#v3.5" hostspecific="true" #>
<#@ assembly name="System.Core, Version=3.5.0.0" #>

Есть идеи?

1 Ответ

2 голосов
/ 12 марта 2011

Похоже, вы действительно используете T4 просто для запуска сценариев, а не для генерации выходных данных из самой системы шаблонов.Вместо этого вы явно генерируете выходные данные как сборку.

T4 в VS2010 всегда использует 4.0 runtime / clr для компиляции, и, похоже, нет способа попросить метод RegEx.Compile выплевыватьиз сборки 2.0.

Даже если вы переместите RegEx.Compile в вспомогательную библиотеку, созданную для цели 2.0, то при загрузке в 4.0 CLR он просто объединится до версии 4.0.

Вместо этого вам нужен способ получить 2.0 CLR в память, для которого, безусловно, самый простой способ - переместить код шаблона в его собственный exe.

Затем вы можете вызвать этот exe из пользовательскогоПравило предварительной сборки проекта.

...