2017-04-03 53 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 
)