首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F#假-无法获得.nuspec文件中的伪合并占位符参数

F#假-无法获得.nuspec文件中的伪合并占位符参数
EN

Stack Overflow用户
提问于 2015-04-11 01:07:32
回答 1查看 285关注 0票数 1

下面的伪文件包含以下代码,用于在解决方案中将NuGet包打包在一起:https://github.com/Aaronontheweb/akka-monitoring/blob/master/build.fsx#L143

代码语言:javascript
复制
for nuspec in !! "src/**/*.nuspec" do
        printfn "Creating nuget packages for %s" nuspec

        CleanDir workingDir

        let project = Path.GetFileNameWithoutExtension nuspec 
        let projectDir = Path.GetDirectoryName nuspec
        let projectFile = (!! (projectDir @@ project + ".*sproj")) |> Seq.head
        let releaseDir = projectDir @@ @"bin\Release"
        let packages = projectDir @@ "packages.config"        
        let packageDependencies = if (fileExists packages) then (getDependencies packages) else []
        let dependencies = packageDependencies @ getAkkaDependency project
        let releaseVersion = release.NugetVersion
        let desc = description project

        let pack outputDir  =
            NuGetHelper.NuGet
                (fun p ->
                    { p with
                        Description = desc
                        Authors = authors
                        Copyright = copyright
                        Project =  project
                        Properties = ["Configuration", "Release"]
                        ReleaseNotes = release.Notes |> String.concat "\n"
                        Version = releaseVersion
                        Tags = tags |> String.concat " "
                        OutputPath = outputDir
                        WorkingDir = workingDir
                        Dependencies = dependencies })
                nuspec

        // Copy dll, pdb and xml to libdir = workingDir/lib/net45/
        ensureDirectory libDir
        !! (releaseDir @@ project + ".dll")
        ++ (releaseDir @@ project + ".pdb")
        ++ (releaseDir @@ project + ".xml")
        ++ (releaseDir @@ project + ".ExternalAnnotations.xml")
        |> CopyFiles libDir

        // Copy all src-files (.cs and .fs files) to workingDir/src
        let nugetSrcDir = workingDir @@ @"src/"
        // CreateDir nugetSrcDir

        let isCs = hasExt ".cs"
        let isFs = hasExt ".fs"
        let isAssemblyInfo f = (filename f).Contains("AssemblyInfo")
        let isSrc f = (isCs f || isFs f) && not (isAssemblyInfo f) 
        CopyDir nugetSrcDir projectDir isSrc

        //Remove workingDir/src/obj and workingDir/src/bin
        removeDir (nugetSrcDir @@ "obj")
        removeDir (nugetSrcDir @@ "bin")

        // Create both normal nuget package and symbols nuget package. 
        // Uses the files we copied to workingDir and outputs to nugetdir
        printfn "nugetDir %s" nugetDir
        pack nugetDir

和下面的.nuspec文件https://github.com/Aaronontheweb/akka-monitoring/blob/master/src/Akka.Monitoring/Akka.Monitoring.Nuspec

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <id>@project@</id>
    <title>@project@@title@</title>
    <version>@build.number@</version>
    <authors>@authors@</authors>
    <owners>@authors@</owners>
    <licenseUrl>https://github.com/Aaronontheweb/akka-monitoring/blob/master/LICENSE</licenseUrl>
    <projectUrl>https://github.com/Aaronontheweb/akka-monitoring</projectUrl>
    <iconUrl>https://raw.githubusercontent.com/akkadotnet/akka.net/gh-pages/images/icon-32x32.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>@description@</description>
    <releaseNotes>@releaseNotes@</releaseNotes>
    <copyright>@copyright@</copyright>
    <tags>@tags@</tags>
    @dependencies@
  </metadata>
</package>

由于升级到最新版本的FAKE和NuGet,我得到了以下错误:

代码语言:javascript
复制
Time Elapsed 00:00:01.03
Finished Target: Build
Starting Target: CopyOutput (==> Build)
Creating D:\Repositories\olympus\akkadotnet-performance-counters\bin\Akka.Monitoring
Creating D:\Repositories\olympus\akkadotnet-performance-counters\bin\Akka.Monitoring.StatsD
Finished Target: CopyOutput
Starting Target: CleanNuget
Creating D:\Repositories\olympus\akkadotnet-performance-counters\bin\nuget
Finished Target: CleanNuget
Starting Target: BuildRelease (==> CopyOutput, CleanNuget)
Finished Target: BuildRelease
Starting Target: Nuget (==> BuildRelease)
Creating nuget packages for D:\Repositories\olympus\akkadotnet-performance-counters\src\Akka.Monitoring\Akka.Monitoring.
Nuspec
Creating D:\Repositories\olympus\akkadotnet-performance-counters\bin\build
Creating D:\Repositories\olympus\akkadotnet-performance-counters\bin\build\src\
Deleting D:\Repositories\olympus\akkadotnet-performance-counters\bin\build\src\obj
D:\Repositories\olympus\akkadotnet-performance-counters\bin\build\src\bin does not exist.
nugetDir bin\nuget
D:\Repositories\olympus\akkadotnet-performance-counters\.nuget\nuget.exe pack -Symbols -Version 0.3.3 -OutputDirectory "
D:\Repositories\olympus\akkadotnet-performance-counters\bin\nuget" "D:\Repositories\olympus\akkadotnet-performance-count
ers\src\Akka.Monitoring\Akka.Monitoring.Nuspec"    -Properties Configuration="Release"
Running build failed.
Error:
System.Exception: Error during NuGet package creation. D:\Repositories\olympus\akkadotnet-performance-counters\.nuget\nu
get.exe pack -Symbols -Version 0.3.3 -OutputDirectory "D:\Repositories\olympus\akkadotnet-performance-counters\bin\nuget
" "D:\Repositories\olympus\akkadotnet-performance-counters\src\Akka.Monitoring\Akka.Monitoring.Nuspec"    -Properties Co
nfiguration="Release"
The element 'metadata' in namespace 'http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd' cannot contain text. Lis
t of possible elements expected: 'references, summary, frameworkAssemblies, developmentDependency, language, dependencie
s' in namespace 'http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd'.
   at Fake.NuGetHelper.NuGet(FSharpFunc`2 setParams, String nuspecOrProjectFile) in C:\code\fake\src\app\FakeLib\NuGet\N
ugetHelper.fs:line 406
   at FSI_0001.Build.createNugetPackages[a](a _arg1) in D:\Repositories\olympus\akkadotnet-performance-counters\build.fs
x:line 185
   at FSI_0001.Build.clo@228-8.Invoke(Unit _arg1) in D:\Repositories\olympus\akkadotnet-performance-counters\build.fsx:l
ine 229
   at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 41
1

其中的TL;DR;似乎并不是真的在.nuspec文件上进行占位符替换,而且NuGet正在获取文件的文字内容,而不是带有所提供的编程值的合并文件。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-13 16:38:22

file正在寻找".Nuspec“文件,但是您的文件名为".nuspec”。https://github.com/fsharp/FAKE/commit/15dc617624ac514268b8e9a4bd80dd1203e61054应该修复它。在过程中释放。

下一次你可能想要打开一个假的问题。那我就快点修好它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29572870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档