2016-04-28 1 views
0

Для моего таможенного контроля мне нужно добавить следующий атрибут к AssemblyInfo.cs:Как добавить атрибут ThemeInfo в AssemblyInfo.cs с FAKE?

using System.Windows; 

[assembly: ThemeInfo(ResourceDictionaryLocation.None,  
ResourceDictionaryLocation.SourceAssembly 
)] 

ли это как-то можно с имеющимися вариантами поддельными или нуждается ли она в другой реализации атрибута?

Решение: Как упомянуто AlexM UpdateAttribute является ключом, где ThemeAttribute уже в AssemblyInfo. Здесь шанс окончательный код для справки с помощью дефолтов ProjectScaffold:

Target "AssemblyInfo" (fun _ -> 
    let getAssemblyInfoAttributes projectName = 
     [ Attribute.Title (projectName) 
      Attribute.Product project 
      Attribute.Description summary 
      Attribute.Version release.AssemblyVersion 
      Attribute.FileVersion release.AssemblyVersion 
     ] 

    let getProjectDetails projectPath = 
     let projectName = System.IO.Path.GetFileNameWithoutExtension(projectPath) 
     (projectPath, 
      projectName, 
      System.IO.Path.GetDirectoryName(projectPath), 
      (getAssemblyInfoAttributes projectName) 
     ) 

    !! "src/**/*.??proj" 
    |> Seq.map getProjectDetails 
    |> Seq.iter (fun (projFileName, projectName, folderName, attributes) -> 
     match projFileName with 
     | Fsproj -> UpdateAttributes (folderName </> "AssemblyInfo.fs") attributes 
     | Csproj -> UpdateAttributes ((folderName </> "Properties") </> "AssemblyInfo.cs") attributes 
     | Vbproj -> UpdateAttributes ((folderName </> "My Project") </> "AssemblyInfo.vb") attributes 
     | Shproj ->() 
     ) 
) 
+0

Почему бы не иметь этот атрибут от начала, почему вам нужно поддельные, чтобы установить это, я обычно обновлять AssemblyInfo атрибутов с них, как 'CLSCompliant' , 'Copyright' и т. Д. –

+0

Я использовал ProjectScaffold для скрипта сборки, а задача AssemblyInfo создает весь файл. Но, по крайней мере, хорошая идея. Я думаю, что есть функции UpdateAttribute. Я проверю. Насколько я вижу, проблема с текущим CreateCSharpAssemblyInfo заключается в том, что в качестве значений могут использоваться только строки. Для перечислений потребуются некоторые изменения кода. – KCT

ответ

1

Альтернативный способ приближения к этому должен иметь в своем проекте (ы) с самого начала с любым дополнительным атрибутом как ThemeInfo в AssemblyInfo.cs. Иметь цель в вашей поддельной сценарии обновления общих атрибутов:

Target "UpdateAssemblyInfo" (fun _ -> 
    let csharpProjectDirs = 
     !! "**/**/*.csproj" 
     |> Seq.map (directory >> directoryInfo) 

    let sharedAttributes = 
     [ Attribute.Description description 
      Attribute.Product product 
      Attribute.Copyright copyright 
      Attribute.Company company 
      Attribute.Version version 
      Attribute.FileVersion version 
      ] 
    let applyAssemblyInfo (projDir:DirectoryInfo) = 
     let assemblyInfoFile = projDir.FullName @@ "Properties/AssemblyInfo.cs" 
     let attributes = (Attribute.Title projDir.Name) :: sharedAttributes 

     UpdateAttributes 
      assemblyInfoFile 
      attributes 

    csharpProjectDirs |> Seq.iter applyAssemblyInfo 
) 
+0

хорошая идея. Просто протестировал функцию UpdateAttributes, но я получаю сообщение об ошибке, как только у меня есть атрибут ThemeAttribute в AsseblyInfo (переведенный): «Свойства CS7036 \ AssemblyInfo.ca (10,12): Нет аргумента, который соответствует формальному параметру« genericDictionaryLocation » «from» ThemeInfoAttribute.ThemInfoAtrribute (ResourceDictionaryLocation, ResourceDictionaryLocation) «Проблема в том, что ThemeInfo использует Enums not string [сборка: ThemeInfoAttribute (ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] – KCT

+0

Я пробовал, и все работает нормально. AssemblyInfo.cs содержит '[сборка: ThemeInfo (ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]' перед запуском 'UpdateAssemblyInfo'. Позднее обновления обновляются с необходимыми значениями, например:' copyright = "Copyright" + company + DateTime.Now .ToString ("yyyy") ' –

+1

Большое спасибо. rks сейчас. Я вернул свои изменения, попробовав их снова. Мне просто нужно было изменить «CreateCSharpAssemblyInfo» ('CreateFSharpAssemblyInfo'' CreateVisualBasicAssemblyInfo', если необходимо) в 'UpdateAttribute'. Я добавляю свой код для справки в свой вопрос. Должно быть, я раньше делал что-то неправильно. Я только заметил, что методы create добавляют константы для 'Version' и' InformationalVersion'. Эти коды не обновляются. Спасибо, что помогли мне. – KCT

 Смежные вопросы

  • Нет связанных вопросов^_^