Cake build - 使用PackageReferences

时间:2017-09-05 16:38:44

标签: nuget cakebuild

我有一个Visual Studio 2017解决方案,其中包含.NET Standard,.NET Core和.NET Framework项目。我的.NET Framework 4.6.2项目在.csproj文件中使用PackageReferences - 而不是packages.config。

这似乎是指定NuGet包的新方法,并允许将来迁移到.NET Standard 2.0(我希望如此)。 https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files

的csproj:

<ItemGroup>
    <PackageReference Include="LanguageExt.Core">
        <Version>2.1.1</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.SqlServer.Dac">
          <Version>1.0.3</Version>

VS显示很酷的图标:

project references

无论如何,解决方案在Visual Studio下编译得很好,但在通过cake编译时失败并出现构建错误。

Databases\DatabaseInstaller.cs(5,27): error CS0234: The type or namespace name 'Dac' does not exist in the namespace 'Microsoft.SqlServer' (are you missing an assembly reference?) [C:\code\Core.AcceptanceTesting\Core.AcceptanceTesting.csproj]

这些较新的&#34; PackageReferences&#34;蛋糕构建支持?

这是我的蛋糕脚本中的一段:

// NuGet restore packages for .NET Framework projects (and .NET Core projects)
Task("NuGet-Restore")
    .IsDependentOn("Clean")
    .Does(() =>
    {
        NuGetRestore(solutionFile);
    });

// NuGet restore packages for .NET Core projects only
Task("DotNetCoreRestore")
    .IsDependentOn("NuGet-Restore")
    .Does(() =>
    {
        var settings = new DotNetCoreRestoreSettings
        {
            ArgumentCustomization = args => args.Append("/p:Version=" + versionPrefix + "-" + versionSuffix)
        };
        DotNetCoreRestore(settings);
    });

// Build our solution
 Task("Build")
    .IsDependentOn("DotNetCoreRestore")
    .Does(() =>
    {
        DotNetCoreBuild(
            solutionFile,
            new DotNetCoreBuildSettings()
            {
                ArgumentCustomization = args => args.Append("/p:Version=" + versionPrefix + "-" + versionSuffix),
                Configuration = configuration
            });
    });

2 个答案:

答案 0 :(得分:1)

您使用的是什么版本的Cake?最近更新了.Net Core别名以反映API表面中的一些更改。如果您尝试以下操作会发生什么:

var settings = new DotNetCoreRestoreSettings
{
    ArgumentCustomization = args => args.Append("/p:Version=" + versionPrefix + "-" + versionSuffix)
};

DotNetCoreRestore(solutionFile, settings);

即。包括解决方案文件的路径。

根据这个例子:

https://github.com/cake-contrib/Cake.Recipe/blob/develop/Cake.Recipe/Content/build.cake#L128

答案 1 :(得分:1)

我下载了您的回购并将其建成。使用下面的构建定义。它在Visual Studio中工作的原因是因为它使用MSBuild和Nuget.exe。不要在.NET Framework上调用DotNetCoreX命令。

Task("Build")
    .IsDependentOn("NuGet-Restore")
    .Does(() => {
        MSBuild(solutionFile);
});