檢測C#版本我有一箇舊線的C#代碼,基本上是這樣的:在編譯時
foo.set_Parent(parent);
它已經多年編譯罰款。現在,在VS2015我得到的錯誤:
CS0571 'Foo.Parent.set': cannot explicitly call operator or accessor
所以我可以重寫路線爲:
foo.Parent=parent;
這建立在VS2015罰款,但在VS2013它給人的錯誤:
'Foo.Parent' is not supported by the language; try directly calling accessor methods 'Foo.get_Parent()' or Foo.set_Parent(Foo)'
所以簡單的解決方法是簡單地根據編譯器運行的版本確定這兩行。但是,如何檢測編譯器的哪個版本正在執行?
並且爲了記錄,不,我不能僅僅指示團隊中的每個人都同時升級到VS2015。
其他信息 - 給大家聞老鼠,我會繼續和拖出醜陋的真相,但我不認爲這會改變任何東西。 Foo班來自一個古老的Borland大會,這個大會在德爾福都有聯繫(是的,我們正在遷移,但還沒有到那裏)。所以實際的代碼,可以編譯高達VS2013,看起來是這樣的:
using Borland.Vcl;
using RepGen;
using SnapReportsForm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
namespace MigrantCOM {
[ComVisible(true)]
[Guid("48245BA3-736B-4F98-BDC5-AD86F77E39F4")]
[ProgId("MigrantCOM.Exports")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class MigrantCLRExports { // : MarshalByRefObject
public string Test(string s) { return s+s; }
}
[ComVisible(true)]
[Guid("1154D364-B588-4C31-88B9-141072303117")]
[ProgId("MigrantCOM.SnapRepCOM")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class SnapRepCOM {
TRepGen repGen;
TStringList snapRefs=new TStringList();
TForm parent=new TForm(null);
TMemo designerMemo;
List<TReference> references=new List<TReference>();
TRunAsSnapContext runAsSnapContext=new TRunAsSnapContext();
public SnapRepCOM() {
designerMemo=new TMemo(parent); designerMemo.set_Parent(parent);
...
}
因此類被實例化是Borland.Vcl.TMemo這是老德爾福組件的一部分。
對我來說這看起來*很奇怪。就我所知,您無法直接調用訪問者。你能提供一個簡短但完整的例子來證明這個問題嗎? –
如果一切都失敗了,我想反射可以用作解決方法。 –
foo.Parent =父應該在任何版本的c#/ .net中工作...你可以發佈一個foo.Parent是「更多代碼」的例子。 –