我在从 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
...它惨遭失败,吐出数百个“类型或命名空间名称''不存在”的错误-种类
为什么它会这样工作?
然而奇怪的是,如果第一个命令在此之前执行,我发布的第二个命令可以正常工作。
我想在“正常”构建时执行的任务与构建包时执行的任务不同,现在我想知道它们有什么不同。
什么症状似乎导致它
我注意到在项目的项目文件中,我想构建一个包,其中包含一个自定义部分:
<PropertyGroup>
<PreBuildEvent>
cscript $(ProjectDir)SvnRevision\svnrevision.vbs $(ProjectDir) $(ProjectDir)Version.cs
nuget install "$(ProjectDir)packages.config" -o "$(SolutionDir)Packages"
</PreBuildEvent>
</PropertyGroup>
这似乎是造成这种差异的原因;如果我进行“正常”构建,我可以看到在我的解决方案文件夹中创建了一个新的“Packages”目录。但是,正如您可能已经猜到的那样,当我尝试执行包创建命令时,该目录丢失了。如果我让 Visual Studio 为我创建包,我也不会遇到这个问题。
也许我也必须更改项目文件或传递的属性才能为我的包创建继承这种行为?
或者有没有办法强制“正常”构建,然后以某种方式附加包创建?