C# 对象初始值设定项和 v2.0 编译器错误

问题描述 投票:0回答:2

我在 TeamCity (v4.0) 中设置我的项目之一时遇到问题,特别是在使用对象初始值设定项时。

该项目正常构建得很好,但是 TeamCity 似乎将构建文件转换为它喜欢的东西(一些 MSBuild 突变),并且当涉及到为解决方案的一部分编译代码时,当它看到对象初始化程序时,它会犹豫不决。

具体错误是:

[11:16:21]: ErrorView.xaml.cs(22, 187): error CS1026: ) expected
[11:16:21]: ErrorView.xaml.cs(22, 208): error CS0116: A namespace does not directly contain members such as fields or methods
[11:16:21]: ErrorView.xaml.cs(27, 16): error CS1518: Expected class, delegate, enum, interface, or struct
[11:16:21]: ErrorView.xaml.cs(35, 16): error CS1518: Expected class, delegate, enum, interface, or struct
[11:16:21]: ErrorView.xaml.cs(46, 91): error CS1031: Type expected
[11:16:21]: ErrorView.xaml.cs(46, 119): error CS0116: A namespace does not directly contain members such as fields or methods
[11:16:21]: ErrorView.xaml.cs(48, 17): error CS1022: Type or namespace definition, or end-of-file expected

当我进一步研究这个问题时,问题似乎与使用 v2.0 框架目录中的 CSC 将构建文件转换为 TeamCity 格式有关。

是否可以使用对象初始值设定项(.NET 3.0 功能)和 .NET 2.0 编译器来编译代码(我假设不能,尽管我可能会遗漏一些东西),如果不能,是否有人知道如何强制它使用 3.0 编译器(如果存在)还是 3.5 编译器?

对于那些感兴趣的人,正在执行的 CSC 命令是:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE 
/reference:..\..\..\build\blah.Logging.dll /reference:..\..\..\build\blah.Presentation.Interfaces.dll 
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.VisualBasic.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" 
/reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" 
/reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.Luna.dll" 
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll 
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll 
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll 
/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll 
/reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\UIAutomationProvider.dll"
/reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll" /debug+ /debug:full /filealign:512 
/keyfile:..\..\..\resources\blah.snk /optimize- /out:obj\Debug\blah.dll 
/resource:obj\Debug\blah.UserInterface.Properties.Resources.resources
/resource:obj\Debug\blah.UserInterface.blah.exe.license /target:library 
/win32icon:blah.ico SignalStrengthIndicator.xaml.cs TrayNotifier.xaml.cs ConnectedView.xaml.cs ConnectionProgressView.xaml.cs NetworkPasswordView.xaml.cs 
TrayProgress.xaml.cs NetworkConnectionView.xaml.cs ClassFiles\NetworkTypeConverter.cs 
ClassFiles\SecurityImageConverter.cs ClassFiles\SecurityTooltipConverter.cs 
ClassFiles\SignalStrengthTooltipConverter.cs ClassFiles\SignalVisibilityConverter.cs 
ClassFiles\SynchronizedObservableCollection.cs ConnectionOption.xaml.cs 
DisconnectionProgressView.xaml.cs ErrorView.xaml.cs ..\..\..\config\assemblyversion.cs 
Properties\Resources.Designer.cs Properties\Settings.Designer.cs

谢谢!

更新:我已经部分(阅读:我对此不满意)通过将构建运行程序从 Nant 更改为命令运行程序来解决了问题 - 这只是按照预期执行了 Nant 构建文件,没有任何操作,尽管反馈级别是不同的。任何其他建议将不胜感激。

teamcity csc object-initializers
2个回答
3
投票

您使用的是 sln2005 构建运行程序吗?这将使用 2.0 csc。检查您的构建配置并将其更改为 sln2008 运行程序(请参阅 http://www.jetbrains.net/confluence/display/TCD4/3.Build+Runners )。那应该使用 3.5 编译器。

如果您使用的是 MSBuild 运行程序 http://www.jetbrains.net/confluence/display/TCD4/MSBuild 检查您是否已在配置页面将版本号设置为3.5。

编辑:检查 NAnt 后 请参阅 http://www.jetbrains.net/confluence/display/TCD4/NAnt_

其中显示:“默认情况下,NAnt msbuild 任务使用 MSBuild 2.0(来自 Microsoft .NET Framework 2.0),但是如果将值为 true 的 teamcity_dotnet_use_msbuild_v35 属性添加到NAnt 脚本中的 msbuild 任务例如:“

<msbuild project="SimpleEcho.v35.proj">
   <!-- this property enables MSBuild 3.5 -->
   <property name="teamcity_dotnet_use_msbuild_v35" value="true"/>
   ...
 </msbuild>

0
投票

对于 NAnt 脚本,可以简单地在构建配置设置中定义系统属性 teamcity_dotnet_use_msbuild_v35 (http://www.jetbrains.net/confluence/display/TCD4/6.Properties+and+environment+variables) 以使其运行 msbuild 3.5.

另一方面,如果 NAnt 目标框架设置为 net-3.5(仅适用于 NAnt 0.86 beta 1),则应从 .NET 3.5 文件夹中获取 msbuild。

© www.soinside.com 2019 - 2024. All rights reserved.