2011-01-12 3 views
1

У меня есть два проекта в моем решении. Мне нужно скопировать значения из enum1 в Project1 в enum2 в project2. Возможно ли использование T4?T4 копия enum между проектами

EDIT

Позвольте мне описать мое положение немного лучше. Проект1, где enum1, генерируется инструментом. В основном это объекты, созданные из базы данных, и перечисление имен таблиц. Этот проект1 используется на стороне сервера для взаимодействия с базой данных. Серверная сторона взаимодействует с клиентской стороной через WCF. В вопросе разделения я не хочу делиться своим проектом1 через WCF. Но есть одно перечисление с именами сущностей. Я использую имена сущностей на стороне клиента, чтобы сделать некоторые общие задачи. Например, я отправил некоторые значения через WCF (Client -> Server), и я использую имена сущностей для сопоставления значений соответствующим объектам.

+1

Почему вы должны сделать это? Вы уверены, что не хотите объявлять их в одном месте (т. Е. Третий проект) и ссылаться на них в двух других? Обратите внимание, что если вы определяете то же самое перечисление в двух разных проектах, вы не можете их смешивать, они по-прежнему считаются разными типами. –

+0

Что сказал @Lasse V. Karlsen. – leppie

+0

Добавлен ответ вместо этого с дополнительной информацией. –

ответ

4

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

Однако вы, вероятно, не хотите этого делать.

Но, если да, есть еще более простой способ: вы просто добавляете исходный файл перечисления в качестве ссылки во второй проект. Добавив ссылку, вы фактически не делаете копию файла, вы просто связываетесь с ней в другом проекте, и тогда нет необходимости гадать с T4. Это, однако, предполагает, что вы не хотите каким-либо образом изменять перечисление в процессе.

Чтобы добавить ссылку, просто нажмите Добавить существующий элемент, как обычно, перейдите к исходному файлу перечисления, но в кнопке «Добавить» есть небольшое раскрывающееся меню, содержащее элемент меню ссылки. Используйте это, и вы увидите, что ваш новый файл имеет небольшой символ ссылки, наложенный на его значок в обозревателе решений, указывая, что это ссылка.

Однако причина, по которой я сказал, что вы, вероятно, не хотите этого делать, заключается в том, что даже если вы скопируете весь файл перечисления, как он есть из одного проекта в другой, эти два перечисления не являются одним и тем же типом.

Другими словами, если вы в одном проекте должны вызвать код в другом проекте, использование перечисления из проекта A при вызове кода в проекте B, объявленном для использования перечисления в проекте B, не будет работать, они это разные типы. Сборка является частью идентификатора типа.

Если вам нужно это сделать, вам нужно либо объявить перечисление в проекте A (или B), либо указать этот проект в другом, либо объявить его в третьем проекте, и ссылаться на этот третий проект в обоих A и B.

+0

См. Мой пост Я добавил дополнительную информацию. – user137348

0

Возможно, вы можете создать шаблон для чтения файла из одного проекта и записи в проекте, который содержит tt. Не забудьте изменить пространство имен вашего типа, если вы собираетесь использовать оба проекта в одной и той же точке.

ЦГ:

<#@ template hostspecific="true" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Text" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ import namespace="System.IO" #> 
<#@ output extension=".cs" #> 

<#    
var [email protected]"..\Domain.Model\MyEnum.cs"; 
path = this.Host.ResolvePath(path); 

var content = File.ReadAllText(path); 

// mental note: learn regex once for all¡¡¡ 
content=content.Replace("namespace Domain.Model", "namespace Domain.Dtos"); #> 

<#=content#> 
Смежные вопросы