2017-09-27 7 views
2

SQLCLR Visual Studio 2015Les propriétés implémentées automatiquement doivent définir à la fois les accesseurs get et set

Je commence à écrire du code CLR.

Je reçois l'erreur suivante lors de la compilation d'une fonction CLR SQL

CompilerError

J'utilise le .Net Coordinates library.

Le code en question est

public Datum.Datum Datum { get; } 

La même bibliothèque lors de la compilation dans une application console C# (non CLR) construit et exécute avec succès en utilisant Visual Studio 2015.

Ma compréhension est que l'aide de Visual Studio J'utilise C# v6.

Le .sqlproj pourrait-il forcer l'utilisation d'une version antérieure de C#?

+0

Si vous cliquez sur le projet de la principale menu existe-t-il une option "enable C# 6"? –

+2

La propriété est la propriété auto et il a obtenu seulement. Si elle n'a pas d'ensemble ou de logique de retourner quelque chose, comment voulez-vous qu'il retourne quoi que ce soit. C'est pourquoi vous voyez cette erreur. Si vous êtes indenté pour définir la valeur de cette propriété à l'intérieur de la classe, vous pouvez déclarer private set dans la propriété. Ou avoir une certaine logique dans le get pour retourner de la valeur. –

+0

@ChetanRanpariya C# 6 permet de déclarer les auto-propriétés sans setter, elles peuvent être assignées dans le ctor par exemple. –

Répondre

0

Si vous ne souhaitez pas utiliser C# 6, mettre en œuvre le getter avec un champ de support privé:

public Datum.Datum Datum { get {return _datum; } } 
private Datum.Datum _datum; 

Définissez la valeur de _datum quelque part dans la classe (cteur, méthode init, ...) .

+0

C'est la chose que je veux utiliser C# 6.0 mais je soupçonne que les paramètres quelque part, éventuellement le fichier sqlprof, pourraient forcer l'utilisation d'une version antérieure, ou peut-être que le SQL Server Data Tools 2015 ne supporte pas je ne sais pas –

1

Le problème principal semble être une déconnexion entre Visual Studio et .NET Framework/CLR. Visual Studio, semble-t-il, peut être mis à jour pour utiliser les nouvelles versions de C#, indépendamment de toute nouvelle version existante sur votre machine.

Vous ne devrait pas besoin de spécifier en utilisant C# 6.0 dans les propriétés construire SQLCLR avancées, mais cela vous donne un message d'erreur qui est perspicace:

Option non valide « 6 » pour/langversion; doit être ISO-1, ISO-2, 3, 4, 5 ou par défaut

En regardant les messages de sortie (en supposant un niveau suffisamment élevé), il devrait montrer que vous utilisez C: \ Windows \ Microsoft .NET \ Framework \ v4.0.30319 \ Csc.exe, donc il ne semble pas que le fichier .sqlproj ou SSDT forcer quelque chose ici. Mais, si vous allez à une invite de commande, accédez au dossier contenant Csc.exe et l'exécuter directement (juste Csc à l'invite), vous devriez voir la note suivante:

Microsoft (R) Visual C# Compilateur version 4.6.1590.0
pour C# 5
Droit d'auteur (C) Microsoft Corporation. Tous les droits sont réservés.

Ce compilateur est fourni avec Microsoft (R) .NET Framework, mais ne prend en charge que les versions linguistiques jusqu'à C# 5, qui n'est plus la dernière version.Pour les compilateurs qui prennent en charge les versions plus récentes du langage de programmation C#, voir http://go.microsoft.com/fwlink/?LinkID=533240

Ce lien vous amène au dépôt GitHub pour Roslyn. Pour faciliter les choses, voici le lien direct vers cette page, à partir de la section pour télécharger le compilateur sans téléchargement aussi Visual Studio (puisque vous avez déjà):

https://github.com/dotnet/roslyn#download-c-and-visual-basic