Ich habe eine alte Linie von C# -Code, die im Grunde wie folgt aussieht:bei der Kompilierung
foo.set_Parent(parent);
Es hat sich seit Jahren in Ordnung zusammengestellt. Jetzt in VS2015 erhalte ich die Fehlermeldung:
CS0571 'Foo.Parent.set': cannot explicitly call operator or accessor
So kann ich die Linie umschreiben als:
foo.Parent=parent;
Das in VS2015 fein baut, aber in VS2013 gibt es den Fehler:
'Foo.Parent' is not supported by the language; try directly calling accessor methods 'Foo.get_Parent()' or Foo.set_Parent(Foo)'
Die einfache Lösung besteht also einfach darin, diese zwei Zeilen basierend auf der Version des Compilers zu definieren. Aber wie erkennen Sie, welche Version des Compilers ausgeführt wird?
Und für die Aufzeichnung, nein, ich kann nicht einfach diktieren, dass jeder im Team gleichzeitig auf VS2015 aktualisiert.
Zusatzinfo - Für alle, eine Ratte Riechen, ich gehe voran und ziehen Sie die hässliche Wahrheit heraus, obwohl ich nicht glaube, es so gut wie nichts ändern wird. Die Klasse Foo stammt aus einer uralten Borland-Versammlung, die in Delphi gebunden ist (und ja, wir ziehen weg, aber noch nicht dort). Also der eigentliche Code, die zu VS2013 kompiliert up, sieht wie folgt aus:
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);
...
}
So ist die Klasse instanziiert wird Borland.Vcl.TMemo ist, die einen Teil der alten Delphi Montage ist.
Das sieht * sehr * seltsam für mich aus. Sie konnten einen Accessor noch nie direkt aufrufen, soweit mir bekannt ist. Können Sie ein kurzes, aber vollständiges Beispiel zur Veranschaulichung des Problems bereitstellen? –
Wenn alles andere fehlschlägt, stelle ich mir vor, Reflexion könnte als Workaround verwendet werden. –
foo.Parent = Eltern sollte in jeder Version von C# /. Net arbeiten ... Können Sie ein Beispiel dafür, was foo.Parent ist "More Code". –