3

从命令行编译一些最近的更改时,我们刚刚在构建服务器上遇到了一个有趣的错误:

c:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe

错误 CS0246:找不到类型或命名空间名称“var”(您是否缺少 using 指令或程序集引用?)

有问题的代码:

var response = _producerErrors.CreateTextMessage(); 

_producerErrors是来自Apache.NMS的IMessageProducer的类型 是ITextMessage的类型
response

请注意,它从 Visual Studio 成功编译,我可以从命令行本地重现错误,我认为这排除了构建服务器的配置问题。

修复当然是微不足道的,但它让我很难理解为什么编译只是从 MSBuild 命令行失败?有问题的项目有其他var正在使用的关键字编译得很好,所以我怀疑它可能与 Apache 程序集有关,但是什么?

4

2 回答 2

2

您完全确定您的 3.5 目录中没有 2.0 编译器吗?

于 2012-02-04T01:05:15.170 回答
0

我在尝试创建面向多框架的 NuGet 包时遇到了类似的问题。将目标框架设置为 3.5 时,代码在 Visual Studio 2010 中编译良好,但未在命令行编译。经过一些实验,我找到了一个成功的命令行解决方案,尽管我并不完全清楚根本问题是什么。

以供参考:

使用 4.0 引用成功编译程序集(通过 DotPeek 检查确认):

C:\BuildAgent\work\efbf25fbf21ee436>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe My.csproj /p:Configuration=Release;TargetFrameworkVersion=v4.0;ToolsVersion=4.0 /t:Rebuild

注意 MSBuild 输出:

Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.296]

使用 2.0/3.5 引用成功编译程序集(通过 DotPeek 检查确认):

C:\BuildAgent\work\efbf25fbf21ee436>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe My.csproj /p:Configuration=Release;TargetFrameworkVersion=v3.5;ToolsVersion=3.5 /t:Rebuild

注意 MSBuild 输出:

Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.296]

编译失败

C:\BuildAgent\work\efbf25fbf21ee436>C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe My.csproj /p:Configuration=Release;TargetFrameworkVersion=v3.5;ToolsVersion=3.5 /t:Rebuild

注意 MSBuild 输出:

Microsoft (R) Build Engine Version 3.5.30729.4926
[Microsoft .NET Framework, Version 2.0.50727.4984]
于 2013-04-05T21:35:20.037 回答