2016-04-08 6 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がインストールされていることを保証します。また、テンプレートを使用しているすべてのプロジェクトに手動で介入する必要があります(私たちのグループは、1年で数多くのプロジェクトを行いますが、その多くは複数年にわたるメンテナンスを必要とします)。このプロセスでは、ビルドごとに強制的に再生成も強制されます(ビルド前のイベントは一時ファイルに生成され、上書きを試みる前に相違を比較します)。最後に、このパスの結果は、ビルド前のイベントと同じように見えます。

その他のオプションはありますか?

答えて

0

特に私の質問に答えるには:私が見逃していた少なくとも1つのオプションは、私のためにcsファイルを生成するカスタムユーティリティを作成することでした。このコードは、ファイルが実際に異なっている場合や存在しない場合にのみ、適切な著作権マークを付けてファイルを書き出します。

私は、VS2015を使って書かれたバージョン4フレームワークをターゲットとするコンソールアプリケーションとして実装しました。

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); 
     } 
     } 
    } 
    } 
} 

結果のexeファイルをソリューションディレクトリにコピーし、ソリューションの最初のプロジェクトでビルド前イベントを定義します。

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

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

一つのことに注意します$(SolutionDir)はすでに(末尾のバックスラッシュを含んでいるにもかかわらず)、追加のバックスラッシュは、exeファイルの引数の一部として渡されたときにエスケープ引用符に最後の引用を回し防止する必要があります。

0

私は著作権シンボルと同じ問題を抱えていて、私のT4テンプレートでこの解決法を見つけました。

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

申し訳ありませんが、私は早くあなたを助けてくれませんでした。

関連する問題