Изменение файлов проекта на основе решения в Visual Studio 2008

В одном решении C# у меня есть несколько проектов, которые совместно используют файл CommonAssemblyInfo.cs, так что определенные атрибуты сборки являются общими для всех проектов. Это прекрасно работает, пока у меня есть только один файл CommonAssemblyInfo.cs. Однако у меня есть несколько решений (приложений), которые используют эти проекты, и каждое решение имеет свою собственную версию CommonAssemblyInfo.cs.

Как я могу заставить проекты использовать другой файл CommonAssemblyInfo.cs в зависимости от того, в каком решении они находятся?

В конце я хочу, чтобы мои сборки имели атрибуты, специфичные для решения, из которого они были скомпилированы.

Я не думаю, что смогу сделать из них файлы Solution файлы, потому что все они не могут находиться в одном каталоге с одним и тем же именем файла. Я не могу использовать события перед сборкой, потому что у меня нет конкретного проекта, который всегда создается первым. Я бы предпочел не использовать сценарий сборки, потому что я хотел бы иметь возможность создавать и запускать решения в среде Visual Studio.

3 ответа

Решение

Нет, я не верю, что ты не можешь сделать это - и для меня это звучит как очень плохая идея. Если два двоичных файла построены из одного и того же источника с одинаковой конфигурацией, зачем им иметь разные атрибуты?

Чего вы пытаетесь достичь с этим? ИМО, у вас должна быть действительно веская причина, прежде чем делать сборку более сложной и идти против обычного способа ведения дел.

Я бы также предложил, чтобы вы указали только действительно общие вещи в CommonAssemblyInfo.cs файл - такие вещи, как название компании. Тогда у каждого проекта может быть свой AssemblyInfo.cs с настройками проекта, как обычно. Лично я не большой поклонник совместного использования каких-либо исходных файлов между проектами, но я вижу, как это имеет определенный смысл в этом случае.

Вы можете взломать его, используя условную компиляцию (#if). Я делал это на спешке, но это ужасно. Просто реорганизуйте свои проекты лучше, как объясняет Джон Скит.

Если бы вы строили здесь простую библиотеку, на которую должны ссылаться все ваши другие сборки, то я бы сказал, добавить проект библиотеки классов в ваше решение с файлом CommonAssemblyInfo.cs в нем и добавить ссылку из каждого другого проекта.

Так как вам нужно, чтобы у каждого проекта была немного другая версия, у вас есть два варианта:

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

Не зная немного о вашем пространстве решений, это были бы мои рекомендации.

Другие вопросы по тегам