У меня есть старая строка кода С#, которая выглядит в основном так:
foo.set_Parent(parent);
Он составлен отлично в течение многих лет. Теперь в VS2015 я получаю ошибку:
CS0571 'Foo.Parent.set': не может явным образом вызывать оператор или аксессор
Поэтому я могу переписать строку как:
foo.Parent=parent;
Это строит штраф в VS2015, но в VS2013 он дает ошибку:
'Foo.Parent' не поддерживается языком; попробуйте прямо позвонить методы доступа "Foo.get_Parent() 'или Foo.set_Parent (Foo)'
Таким образом, простое исправление заключается в просто ifdef этих двух строках, основанных на том, какая версия компилятора запущена. Но как вы определяете, какая версия компилятора выполняется?
И для записи нет, я не могу просто диктовать, что каждый из команды одновременно обновляется до 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.