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

Compiler construction C#对象初始值设定项和v2.0编译器错误,compiler-construction,teamcity,csc,object-initializers,Compiler Construction,Teamcity,Csc,Object Initializers,我在TeamCity(v4.0)中设置我的一个项目时遇到了一个问题,特别是在使用对象初始值设定项时 项目正常地构建良好,但是TeamCity似乎会将构建文件转换为它喜欢的东西(一些MSBuild变体),当涉及到为解决方案的一部分编译代码时,它会在看到对象初始值设定项时犹豫 具体而言,错误是: [11:16:21]: ErrorView.xaml.cs(22, 187): error CS1026: ) expected [11:16:21]: ErrorView.xaml.cs(22, 208)

我在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 framework目录中的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构建文件,没有进行任何操作,尽管反馈级别不同。任何其他建议都将不胜感激。

您是否使用sln2005构建运行程序?这将使用2.0 csc。检查构建配置并将其更改为sln2008运行程序(请参阅)。应该使用3.5编译器

如果您正在使用MSBuild运行程序 检查您是否已在配置页面上将版本号设置为3.5

编辑:在检查NAnt之后 看

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


...

您是否正在使用sln2005构建运行程序?这将使用2.0 csc。检查构建配置并将其更改为sln2008运行程序(请参阅)。应该使用3.5编译器

如果您正在使用MSBuild运行程序 检查您是否已在配置页面上将版本号设置为3.5

编辑:在检查NAnt之后 看

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


...

对于NAnt脚本,只需在生成配置设置()中定义系统属性teamcity\u dotnet\u使用\u msbuild\u v35即可使其运行msbuild 3.5


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

对于NAnt脚本,只需在生成配置设置()中定义系统属性teamcity\u dotnet\u use\u msbuild\u v35即可使其运行msbuild 3.5


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

Close-但不引用解决方案:|我实际上使用的是NAnt构建文件,但这会为某些项目调用一些msbuild任务-我将进一步研究它。Thank您在TeamCity的Nant build runner上设置的Nant.exe路径与使用命令runner时使用的路径相同吗?没关系。我在TeamCity文档中找到了答案,并更新了我的答案。请关闭-但不引用解决方案:|我实际上使用的是NAnt生成文件,但这会调用某些项目的某些msbuild任务-我将进一步研究它。Thank您在TeamCity的Nant build runner上设置的Nant.exe路径与使用命令runner时使用的路径相同吗?没关系。我在TeamCity文档中找到了答案,并更新了我的答案。
<msbuild project="SimpleEcho.v35.proj">
   <!-- this property enables MSBuild 3.5 -->
   <property name="teamcity_dotnet_use_msbuild_v35" value="true"/>
   ...
 </msbuild>