Estamos usando um arquivo global chamado GlobalAssemblyInfo.cs e um local chamado AssemblyInfo.cs. O arquivo global contém os seguintes atributos:
[assembly: AssemblyProduct("Your Product Name")]
[assembly: AssemblyCompany("Your Company")]
[assembly: AssemblyCopyright("Copyright © 2008 ...")]
[assembly: AssemblyTrademark("Your Trademark - if applicable")]
#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
O AssemblyInfo.cs local contém os seguintes atributos:
[assembly: AssemblyTitle("Your assembly title")]
[assembly: AssemblyDescription("Your assembly description")]
[assembly: AssemblyCulture("The culture - if not neutral")]
[assembly: ComVisible(true/false)]
// unique id per assembly
[assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
Você pode adicionar o GlobalAssemblyInfo.cs usando o seguinte procedimento:
- Selecione Adicionar / item existente ... no menu de contexto do projeto
- Selecione GlobalAssemblyInfo.cs
- Expanda o botão Adicionar clicando na pequena seta para baixo à direita
- Selecione "Adicionar como link" na lista suspensa de botões
AssemblyCultureAttribute
merece uma explicação melhor. O atributo deve estar ausente completamente (a menos que seja um assembly satélite). Ao usar montagens satélites em larga escala, pode ser necessário três, e não dois níveis de arquivos de informações de montagem (global, montagem principal e montagem de satélite, que especificam apenas a cultura nesse caso).No meu caso, estamos construindo um produto para o qual temos uma solução do Visual Studio, com vários componentes em seus próprios projetos. Os atributos comuns vão. Na solução, existem cerca de 35 projetos e uma informação de montagem comum (CommonAssemblyInfo.cs), que possui os seguintes atributos:
Os outros atributos, como AssemblyTitle, AssemblyVersion, etc., são fornecidos por montagem. Ao criar uma montagem, AssemblyInfo.cs e CommonAssemblyInfo.cs são criados em cada montagem. Isso nos dá o melhor dos dois mundos, onde você pode querer ter alguns atributos comuns para todos os projetos e valores específicos para outros.
Espero que ajude.
fonte
<Compile Include="$(MSBuildThisFileDirectory)..\Common\CommonAssemblyInfo.cs"/>
, uma diretiva MSBuild que pode até estar em umCommon.targets
arquivo compartilhado . Reutilização de código yay.A solução apresentada por @JRoppert é quase a mesma que eu faço. A única diferença é que eu coloquei as seguintes linhas no arquivo AssemblyInfo.cs local, pois elas podem variar com cada montagem:
Eu também (geralmente) uso uma informação de montagem comum por solução, com a suposição de que uma solução é uma única linha de produto / produto liberável. O arquivo de informações de montagem comum também possui:
O que definirá o valor "ProductVersion" exibido pelo Windows Explorer.
fonte
As Tarefas da Comunidade MSBuild contêm uma tarefa personalizada chamada AssemblyInfo que você pode usar para gerar seu assemblyinfo.cs. Requer uma pequena edição manual dos arquivos csproj para usar, mas vale a pena.
fonte
Na minha opinião, usar um GlobalAssemblyInfo.cs é mais problemático do que vale a pena, porque você precisa modificar todos os arquivos de projeto e lembre-se de modificar cada novo projeto, enquanto você obtém um AssemblyInfo.cs por padrão.
Para alterações nos valores globais (por exemplo, empresa, produto etc.), as alterações geralmente são tão raras e simples de gerenciar que não considero o DRY uma consideração. Basta executar o seguinte script MSBuild (dependente do MSBuild Extension Pack ) quando desejar alterar manualmente os valores em todos os projetos como um caso único:
fonte
Para compartilhar um arquivo entre vários projetos, você pode adicionar um arquivo existente como um link.
Para fazer isso, adicione um arquivo existente e clique em "Adicionar como link" no seletor de arquivos. (fonte: free.fr )
Quanto ao que colocar no arquivo compartilhado, sugiro colocar coisas que seriam compartilhadas entre assemblies. Coisas como direitos autorais, empresa, talvez versão.
fonte
O uso de um único arquivo AseemblyInfo.cs para vários projetos não é recomendado. O arquivo AssemblyInfo inclui informações que podem ser relevantes apenas para esse assembly específico. As duas informações mais óbvias são:
AssemblyTitle
eAssemblyVersion
.Uma solução melhor pode ser usar o
targets
arquivo manipulado pelo MSBuild para "injetar" atributos de montagem em mais de um projeto.fonte
Uma coisa que achei útil é gerar os elementos AssemblyVersion (etc) aplicando a substituição de token na fase de pré-construção.
Eu uso o TortoiseSVN, e é fácil de usar a sua
SubWCRev.exe
para transformar um modeloAssemblyInfo.wcrev
emAssemblyInfo.cs
. A linha relevante no modelo pode ser algo como isto:O terceiro elemento é o número da revisão. Uso o quarto elemento para verificar se não esqueci de confirmar nenhum arquivo novo ou alterado (o quarto elemento é 00 se estiver tudo OK).
A propósito, adicione
AssemblyInfo.wcrev
ao seu controle de versão e ignoreAssemblyInfo.cs
se você usar isso.fonte