2017-04-03 64 views
2

我正在使用FAKE的「CreateCSharpAssemblyInfo」函數來更新AssemblyInfo.cs。 但我得到的錯誤,即使用CreateCSharpAssemblyInfo會引發錯誤:FAKE-F#MAKE

2) CS0579: Properties\AssemblyInfo.cs: Duplicate 'AssemblyProductAttribute' attribute 
    3) CS0579: Properties\AssemblyInfo.cs: Duplicate 'AssemblyCompanyAttribute' attribute 
    4) CS0579: Properties\AssemblyInfo.cs: Duplicate 'AssemblyCopyrightAttribute' attribute 
    5) CS0579: Properties\AssemblyInfo.cs: Duplicate 'AssemblyVersionAttribute' attribute 
    6) CS0579: Properties\AssemblyInfo.cs: Duplicate 'AssemblyFileVersionAttribute' attribute 

這裏是我使用的代碼:

let assemblyInfo = [ 
    Attribute.Title "My Project" 
    Attribute.Product "My Product" 
    Attribute.Company "XYZ" 
    Attribute.Copyright "Copyright XYZ" 
    Attribute.Version "14.8" 
    Attribute.FileVersion "13.9" 
] 

Target "BuildApp" (fun _ -> 
    CreateCSharpAssemblyInfo "./Source Code/Project/Properties/AssemblyInfo.cs" assemblyInfo 
    !! "/Source Code/Project.sln" 
     |> MSBuildReleaseExt buildDir [("SolutionDir", currentPath @@ "\BuildTools")] "Build" 
     |> Log "AppBuild-Output:" 
) 

我沒有得到這個錯誤的原因。

我是新來的FAKE,並沒有使用F#太多,所以請原諒我,如果這應該是顯而易見的。

如果任何人都可以提供幫助,那會非常有幫助。

+1

'CreateCSharpAssemblyInfo'不引發錯誤,MSBuild的是。一旦失敗,在VS中打開解決方案並在那裏建立 - 它也會失敗。例如,您應該能夠找到問題 - 例如,您可能在項目引用的另一個文件中定義了這些屬性。 –

+0

dotnet core會自動爲你生成這些程序集屬性,這與來自FAKE – Foole

+0

@Charles Mager的衝突:它不是從VS失敗。 – JFI

回答

0

您是否嘗試過CreateCSharpAssemblyInfoWithConfig參數?它允許一個額外的參數:

CreateCSharpAssemblyInfoWithConfig 
     assemblyInfoFile 
     attributes 
     (AssemblyInfoFileConfig(generateClass=false)) 

另外,在UpdateAttribute會做類似的事情(在我的情況下,所有的開發人員在Visual Studio中工作,它是安全的假設默認AssemblyInfo.cs文件會自動生成)。 從doc

更新AssemblyInfo文件中的一組屬性。如果找不到任何屬性,則失敗。

參見下例:

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

    let attributes = 
     [ 
      Attribute.Title "My Project" 
      Attribute.Product "My Product" 
      Attribute.Company "XYZ" 
      Attribute.Copyright "Copyright XYZ" 
     ] 
    let applyAssemblyInfo (projDir:DirectoryInfo) = 
     let assemblyInfoFile = projDir.FullName @@ "Properties/AssemblyInfo.cs" 
     clearReadOnly assemblyInfoFile 
     UpdateAttributes 
      assemblyInfoFile 
      attributes 

    csProjectDirs |> Seq.iter applyAssemblyInfo 
)