我有一行旧的c#代码看起来基本上是这样的:
foo.set_Parent(parent);
多年来已经编好了。现在在VS2015中我收到错误:
CS0571' Foo.Parent.set':无法明确调用运算符或访问者
所以我可以将该行重写为:
foo.Parent=parent;
这在VS2015中构建良好,但在VS2013中它给出了错误:
' Foo.Parent'语言不支持;尝试直接打电话 存取方法' Foo.get_Parent()'或者Foo.set_Parent(Foo)'
因此,简单的解决方法是简单地根据正在运行的编译器版本来定义这两行。但是,如何检测正在执行的编译器版本?
记录中,不,我不能说团队中的每个人都同时升级到VS2015。
其他信息 - 对于每个闻到老鼠的人来说,我会继续前进并拖出丑陋的事实,尽管我不认为它会改变很多东西。 Foo类是来自一个古老的Borland集合体,它在Delphi中都被束缚了(是的,我们正在迁移,但还没有迁移)。因此,编译为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,它是旧Delphi程序集的一部分。