J'essaie de valider que Tampons de protocole va fonctionner avec les nouveaux runtimes portables de l'équipe ASP.NET et, idéalement, avec la plupart des autres environnements modernes. La version 3.0.0-alpha4 a été créée il y a un certain temps à l'aide de profile259, je m'attends donc à ce que des modifications soient nécessaires dans certains cas, mais j'ai pensé que je devais faire un essai. Je suis au courant de Le billet d'Oren Novotny sur le ciblage de .NET Core et je m'attendais à devoir apporter quelques modifications à l'interface de l'entreprise. Fichier nuspec Google.Protobuf mais l'erreur que je rencontre me laisse perplexe.
Version du DNX : 1.0.0-rc1-update1
Le scénario que j'essaie actuellement de tester est une application console ciblant le dnx451. J'ai un exemple d'application très simple :
using Google.Protobuf.WellKnownTypes;
using System;
public class Program
{
public static void Main(string[] args)
{
Duration duration = new Duration { Seconds = 100, Nanos = 5555 };
Console.WriteLine(duration);
}
}
... et un petit project.json
:
{
"compilationOptions": { "emitEntryPoint": true },
"dependencies": { "Google.Protobuf": "3.0.0-alpha4" },
"frameworks": {
"dnx451": { }
}
}
Notez que je n'utilise même pas dnxcore*
ici - ironiquement, j'ai que pour fonctionner sans problème.
dnu restore
fonctionne bien ; dnx run
échoue avec :
Erreur : c : \Users\Jon\Test\Projects\protobuf -coreclr \src\ProtobufTest\Program.cs (9,9) : DNX,Version=v4.5.1 erreur CS0012 : Le type 'Object' est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence à l'assemblage 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Les modifications suivantes entraînent la même erreur :
- Ajouter explicitement une dépendance à
"System.Runtime": "4.0.0"
dans ledependencies
section pour le cadre - Ajouter explicitement une dépendance à
"System.Runtime": "4.0.0-beta-23109"
dans ledependencies
pour le cadre, et de même pour4.0.10-beta-*
,4.0.20-beta-*
y4.0.21-beta*
. - Ajout de dépendances à
System.Runtime
à l'intérieur du paquet NuGet (localement) et la reconstruction par rapport à cela -project.lock.json
a été mis à jour pour inclure System.Runtime v4.0.0, mais la même erreur s'est produite - Idem, y compris un
lib\dotnet
dans le paquet, ainsi que les dépendances
Des étapes qui a fait travail (de manière indépendante, et sans dependencies
), mais m'embrouillent :
- Changer le
Console.WriteLine
appel à justeConsole.WriteLine("foo")
(mais pas d'autres changements) - Changer le type de
duration
à la variableobject
au lieu deDuration
- Suppression de toute allusion aux tampons de protocole et utilisation de l'option
TimeSpan
ou similaire -
Ajouter ce qui suit au fichier project.json dans le fichier
dnx451
section :"frameworkAssemblies": { "System.Runtime": "" }
En fin de compte, je ne veux pas que les utilisateurs aient à faire cela - du moins, pas pour le bien des tampons de protocole. Je suppose que c'est quelque chose Cela a un rapport avec la façon dont nous construisons les tampons de protocole, mais comme je ne comprends pas bien la cause, c'est difficile à résoudre.
Je pense que si je parvenais à trouver un moyen de faire un dependencies
Je pourrais alors ajouter cette dépendance dans Protocol Buffers lui-même, ce qui serait parfait - mais comme avoir une dépendance sur System.Runtime v4.0.0 dans le fichier project.lock ne semble pas aider, je dois manquer quelque chose :(