MSBuild:构建asp.net 4.0网站:.metaproj文件

5
我有一个包含ASP.NET网站的解决方案文件。
当我使用 .NET 4.0 Beta 2 构建该解决方案时,使用以下命令:
"c:\WINDOWS\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe" d:\MyPath\MySolution.sln
一切工作正常,没有错误。然后我尝试使用CruiseControl .NET任务(由服务运行的msbuild脚本)构建相同的解决方案,但是相同的解决方案会出现以下错误:
D:\MyPath\MyWebSite.metaproj (,): errorMSB4025: 无法加载项目文件。找不到文件 'D:\MyPath\MyWebSite.metaproj'。
当然,没有这样的文件。我想 *.metaproj 是为 Web 站点动态生成的类似于 .csproj 的 MSBuild 文件...
但我不知道如何修复此错误...我尝试过通过 Google 搜索 metaproj 文件来解决问题,但没有成功。我尝试手动制作该文件,我插入了一个 <Project> 和 <Task Name =“Rebuild”>,编译没有引发任何错误,但我猜网站并没有成功编译。
同一台计算机具有 .NET 3.5 和 .NET 4.0 项目以及两个框架的环境变量。
6个回答

3

如果您能够在解决方案文件中摆脱项目依赖项,那么就有一种方法可以解决这个问题。您可以在项目文件中保留项目依赖项,但从解决方案文件中删除它们。请参见此链接以了解更多信息:
答案


1
网站没有项目文件。如果是Web应用程序,则引用存储在web.config中。我目前正在使用没有web.config的网站。我将尝试将这些项目引用转换为二进制引用,但有大约40个网站,所以我还没有时间测试。 - Tuomas Hietanen

1

Visual Studio 2010 最终版本已经修复了这个 bug。


很遗憾,我现在又遇到了2010/v4.0的问题。 - jcolebrand

1

我阅读了CruiseControl的讨论并尝试运行与CruiseControl.net相同的命令,并解决了我的问题,因此我移动了我的空间。

目录名称中的空格使得Cruise Control下的msbuild失败!!?

所以我为Cruise Control显式地提供不带空格的目录。以下是示例。

<Project name="ProjectNameHere"> <workingDirectory>c:\dev\work\ProjectNameHere\WorkDir</workingDirectory> <artifactDirectory>c:\dev\work\ProjectNameHere\Artifacts</artifactDirectory> ...


嗯...也许"映射网络驱动器" \localhost\c$...会有所帮助。 无论如何,抱歉,我有很多其他事情要做,所以我没有时间测试每一个可能的解决方案...我希望.NET 4.0 RC或最终版本能够解决这个问题。 - Tuomas Hietanen

1

我在使用 TFS 2008 Build Server 时遇到了同样的问题。一旦我将 TFS 构建器服务器配置切换到使用 4.0 msbuild,我就开始遇到这个问题。如果我手动运行 msbuild,就没有问题,并且日志中显示正在构建元项目文件,但在自动化构建过程中却失败了。

Russ


0

我首先在 my_solution.sln 旁创建了一个名为 my_website.metaproj 的文件,它看起来像这样:

<Project DefaultTargets="Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="Build">
    <Message Text="Building...but nothing to build" />
  </Target>

  <Target Name="Test">
    <Message Text="Testing...but nothing to test." />
  </Target>

  <Target Name="Clean">
    <Message Text="Cleaning...but nothing to clean." />
  </Target>

</Project>

然后它抱怨找不到sgen.exe。我在构建代理上安装了Visual Studio 2010 Beta 2,现在看起来它正在工作。

[编辑] 实际上这并没有完全奏效。它没有将网站项目的依赖项拉到其bin目录中。

我们最终做的是放弃升级构建过程,并使用标准模板的变体重新进行构建过程。这个方法很好用。


嗯...就像我所描述的那样,我也添加了Rebuild-task。但是它并没有起到帮助的作用:实际上,我正在使用TargetPath属性(在.sln文件中)来发布Web站点的发布版本。使用这个空任务后,它并没有构建网站。此外,我正在使用CC.NET而不是TFS,因此没有“标准模板”。 - Tuomas Hietanen

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接