2016-04-08 14 views
0

Kılavuzun ardından here bulundu, dynamical update assembly copyright için tasarlanmış bir ön oluşturma işlemi uyguladık. Ben doğru telif hakkı simgesi (©) içeren VS, elde edilen dosyanın (ve derlenmiş montaj) dosyayı kaydedersenizTexTransform klips ve telif hakkı sembolü

telif hakkı şablon

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

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

olduğunu. Önceden oluşturulmuş TextTransform.exe çağrısının bir parçası olarak yapıldığında (bu durumda v12.0), sonuçta ortaya çıkan dosya '?' yerine. encoding="us-ascii" belirtilerek aynı sonuçları alıyorum Kodlama utf türevlerinden birine ayarlandığında, ' ' olarak çıkar. \ U00A9 kullanılacak şablonu değiştirmek, derleme derlendiğinde aynı sonuçları verir.

code generation in the solution build process'u dahil etmenin üzerinde çalışabileceğimin farkındayım, ancak bu, uygun SDK'lerin kurulmasını sağlayarak yeni işe alımlarda (ve yeni ortam kurulumunda, VM'lerde çok fazla geliştirme yapıyoruz) bir yük ekler. Ayrıca, şablonu kullanan her proje için manuel müdahale gerektirir (grubumuz bir yıl içinde çok yıllı devam eden bakım gerektiren bir çok farklı projeye sahiptir). Süreç aynı zamanda her yapı için bir yeniden oluşturmayı zorlar (önceden oluşturulmuş olay geçici bir dosya oluşturur ve üzerine yazma girişiminde bulunmadan önce farklılıkları karşılaştırır). Son olarak, bu yoldan elde edilen sonuçlar, önceden oluşturulmuş etkinlikle aynı görünmektedir.

Başka hangi seçenekler eksik?

cevap

0

Özellikle de sorumu yanıtlamak için: En az bir diğer seçenek benim için cs dosyasını oluşturmak için özel bir yardımcı program yazmayı içeriyordu. Bu kod dosyayı, aslında farklı veya henüz mevcut değilse doğru telif hakkı işaretiyle yazar.

VS2015 kullanarak yazılmış sürüm 4 çerçevesini hedefleyen bir konsol uygulaması olarak uyguladım.

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

Ben çözüm dizine çıkan exe kopyalayıp çözeltide birinci proje üzerinde bir ön build olayı tanımlar.

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

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

Unutulmaması gereken bir şey: $(SolutionDir) zaten (bir ters eğik çizgi içerir rağmen), ek bir ters eğik çizgi exe args bir parçası olarak geçirilen zaman kaçan bir alıntı haline geçen alıntı dönüm önlemek için gereklidir.

0

Telif hakkı simgesiyle aynı sorunu yaşadım ve bu çözümü T4 şablonum için çözdüm.

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

Üzgünüz, size daha önce yardımcı olamadım.

İlgili konular