MsBuild无法构建软件包,但在“正常”构建之后“仅仅”构建或构建软件包是可以的

时间:2013-08-01 14:26:40

标签: visual-studio msbuild

我在从Web应用程序项目构建Web部署包时遇到问题(在包含多个项目的解决方案中,以及多个Web应用程序中)。

这实际上有效

如果我使用此命令,我可以从命令行构建项目:

msbuild D:\PathTo\Solution\Project\Project.csproj
    /fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic
    /p:SolutionDir="D:\PathTo\Project\\";Configuration=Release;Platform=AnyCpu

但这不起作用

但是,当我尝试使用相同的命令时,为我构建一个部署包就像这样:

msbuild D:\PathTo\Solution\Project\Project.csproj
    /fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic
    /T:Package
    /p:SolutionDir="D:\PathTo\Solution\\";Configuration=Release;Platform=AnyCpu;
    PackageLocation="D:\buildadventures\Project.zip";
    AutoParameterizationWebConfigConnectionStrings=false

......它失败了,吐出了“类型或命名空间名称''不存在的数百个错误”-kind

为什么这样做?

奇怪的是,如果第一个命令在此之前被执行,我发布的第二个命令就可以了。

我认为执行“普通”构建时执行的任务与构建程序包时执行的任务不同,现在我想知道它们的不同之处。

似乎有什么症状导致

我注意到在项目的项目文件中我想构建一个包含自定义部分的包:

<PropertyGroup>
    <PreBuildEvent>
        cscript $(ProjectDir)SvnRevision\svnrevision.vbs $(ProjectDir) $(ProjectDir)Version.cs
        nuget install "$(ProjectDir)packages.config" -o "$(SolutionDir)Packages"
    </PreBuildEvent>
</PropertyGroup>

这似乎是造成这种差异的原因;如果我进行“正常”构建,我可以看到之后在我的解决方案文件夹中创建了一个新的“Packages”目录。 但是,正如您可能已经猜到的那样,当我尝试执行包创建命令时,该目录丢失了。如果我让Visual Studio为我创建包,我也不会遇到这个问题。

也许我必须更改项目文件或传递属性来为我的包创建继承这种行为?

或者是否有办法强制进行“正常”构建,然后只是以某种方式附加包创建?

1 个答案:

答案 0 :(得分:0)

傻傻的我。 我能够通过在我的msbuild命令中调用多个目标来解决这个问题,例如:

msbuild D:\PathTo\Solution\Project\Project.csproj
    /fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic
    /t:Build;Package
    /p:SolutionDir="D:\PathTo\Solution\\";Configuration=Release;Platform=AnyCpu;
    PackageLocation="D:\buildadventures\Project.zip";
    AutoParameterizationWebConfigConnectionStrings=false