2016-04-08 5 views
0

После того, как вы нашли руководство, here, я реализовал процесс предварительной сборки, разработанный для dynamical update assembly copyright.TexTransform cli и символ авторского права

Шаблон для авторского права

<#@ template language="C#" #> 
<#@ output extension=".cs" #> 
using System; 
using System.Reflection; 

[assembly: AssemblyCopyright("Copyright © <#=DateTime.Now.Year#>")] 

Если я сохранить файл в VS, результирующий файл (и скомпилированной сборки) правильно содержит символ авторского права (©). Когда это делается как часть запроса на сборку TextTransform.exe (в данном случае v12.0), результирующий файл содержит '?' вместо. Я получаю те же результаты, указывающие encoding="us-ascii" Когда кодировка задана для любого из вариантов utf, она выводится как « ». Изменение шаблона для использования \ u00A9 дает те же результаты при сборке сборки.

Я знаю, что могу работать над включением code generation in the solution build process, но это добавляет нагрузку на новых сотрудников (и новую настройку среды, мы делаем много разработок в виртуальных машинах), обеспечивающих установку соответствующих SDK. Это также требует ручного вмешательства для каждого проекта с использованием шаблона (наша группа выполняет много разных проектов в год, многие из которых требуют многолетнего непрерывного обслуживания). Этот процесс также создает регенерацию для каждой сборки (событие предварительной сборки генерируется в временном файле и сравнивается с различиями перед попыткой перезаписать). И, наконец, результаты этого пути кажутся такими же, как и с событием предварительной сборки.

Какие еще варианты мне не хватает?

ответ

0

Чтобы конкретно ответить на мой вопрос: по крайней мере, еще один вариант, который я отсутствовал, включал в себя создание пользовательской утилиты для создания файла cs для меня. Этот код записывает файл с правильным знаком защиты авторских прав только в том случае, если он действительно отличается или еще не существует.

Я реализовал его как консольное приложение, ориентированное на платформу версии 4, написанную с использованием VS2015.

namespace GenerateAssemblyCopyright 
{ 
    class Program 
    { 
    const string _fileName = "AssemblyCopyright.cs"; 
    static void Main(string[] args) 
    { 
     if (args.Length == 0 || !Directory.Exists(args[0])) 
     throw new InvalidOperationException("Must supply path for assembly copyright file"); 

     var acPath = Path.Combine(args[0], _fileName); 
     var potentialOutput = [email protected]"using System; 
using System.Reflection; 

[assembly: AssemblyCopyright(""Copyright © {DateTime.Now.Year}"")]"; 
     var exitingOutput = string.Empty; 

     if (File.Exists(acPath)) 
     { 
     using (var sr = new StreamReader(acPath, true)) 
     { 
      exitingOutput = sr.ReadToEnd(); 
     } 
     } 

     if (!exitingOutput.Equals(potentialOutput)) 
     { 
     using (var sw = new StreamWriter(acPath, false, Encoding.UTF8)) 
     { 
      sw.Write(potentialOutput); 
     } 
     } 
    } 
    } 
} 

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

:: set the correct path to the the GenerateCopyright app 
set "generateExe=$(SolutionDir)GenerateAssemblyCopyright.exe" 

"%generateExe%" "$(SolutionDir)\" 

Одно замечание: Несмотря на то, $(SolutionDir) уже включает в себя обратный косую черту(), дополнительный обратный слэш необходим для предотвращения поворота последней цитаты в сбежавшей цитату, когда передается в качестве части ехе арг.

0

У меня была такая же проблема с символом авторского права, и я выяснил это решение для моего шаблона T4.

[assembly: AssemblyCopyright("Copyright <#='\u00A9'#> <#=DateTime.Now.Year#>")] 

Извините, что я не мог помочь вам раньше.