2016-06-30 41 views
7

(podtytuł Pytanie: Czy zasoby nie są obsługiwane w .netstandard 1.3 lub jest mój plik projektu tylko pomieszane?)Dlaczego nie mogę korzystać z zasobów osadzonych (resx) podczas kierowania na .netstandard 1.3?

właśnie utworzona przykład przenośny klasy biblioteki w Visual Studio 2015 Update 3 i dodaje przykładowy plik zasobów. Początkowo plik project.json wygląda następująco:

{ 
    "supports": { 
    "net46.app": {}, 
    "uwp.10.0.app": {}, 
    "dnxcore50.app": {} 
    }, 
    "dependencies": { 
    "Microsoft.NETCore": "5.0.0", 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.0" 
    }, 
    "frameworks": { 
    "dotnet": { 
     "imports": "portable-net452+win81" 
    } 
    } 
} 

dobrze: Nie skompilować błędy!

Następnie użyłem właściwości projektu, aby kierować reklamy na numer .NETStandard 1.3.

portable class library target

Teraz project.json wygląda następująco:

{ 
    "supports": {}, 
    "dependencies": { 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
    "NETStandard.Library": "1.6.0" 
    }, 
    "frameworks": { 
    "netstandard1.3": {} 
    } 
} 

Teraz pojawia się następujący budować błąd - co oznacza w zasadzie działania build EmbeddedRessource nie jest obsługiwany:

german error

Naprawdę nie jestem ekspertem z project.json, ale dla mnie rzeczy wyglądają niekonsekwentnie - i nie mam pojęcia, gdzie jest problem.

  • w pierwszym project.json: jeśli popieram net46, dlaczego jest importowanie net452?
  • w drugim project.json: jeśli używam netstandard1.3, dlaczego istnieje zależność od biblioteki w wersji 1.6?
  • i wreszcie, co to jest .NETPortable, Version=v5.0? Zmiana nazwy na .NET Core miała miejsce na początku tego roku - dlaczego wciąż odwołujemy się do wersji 5.0? Nawet MSDN nie wie <TargetFrameworkVersion>5.0</TargetFrameworkVersion>, który jest określony w csproj

Dla mnie to wydaje się netstandard jest nie tylko o dostępnych bibliotek, oprzyrządowanie wydaje się zaangażowany, too. Ale to nie wyjaśnia, dlaczego zadziałało dla dnxcore50.

+0

podejrzewam, że ma to coś wspólnego z faktem, że aplikacje uniwersalne okna nie wykorzystać 'RESX 'pliki. Ale: uniwersalne aplikacje Windows są kompatybilne z 'netstandardem 1.4' i wyższym ... – ventiseis

+0

masz rację co do części resx, ale UWP są faktycznie kompatybilne z' netstandard1.4' i niżej nie. – nawfal

+1

Masz rację, spojrzałem na [matrycę] (https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md) i źle zrozumiał strzały. Ale jest tam nawet napisane: Jeśli biblioteka jest przeznaczona dla platformy .NET Platform Standard w wersji 1.3, może działać tylko na platformie .NET Framework 4.6 lub nowszej, .NET Core, Universal Windows Platform 10 (UWP) i platformach Mono/Xamarin._ – ventiseis

Odpowiedz

5

Potrzebujesz narzędzia Diagonstics.Tools and Resources.ResourceManager.

dostałem tej pracy (dla .NETStandard 1,4 chociaż) instalując wstępnie wersje, w tym czasie:

  • "System.Diagnostics.Tools": „4.3.0-preview1-24530- 04"
  • «System.Resources.ResourceManager»: «4.3.0-preview1-24530-04»
+0

Jeśli spróbuję tego ponownie w czystym, nowym, aktualnym projekcie VS 2015, to faktycznie działa, po tym jak zainstalowałem pakiet 'System.Reflection.Emit.ILGeneration' w aplikacji UWP. Ale zaznaczę twoją odpowiedź, ponieważ dałeś mi podpowiedź do zainstalowania brakujących paczek. – ventiseis

+1

Wygląda na to, że Microsoft stworzył nową dżunglę kompatybilnych i niezbyt kompatybilnych pakietów, numerów wersji i zależności, która nie jest łatwa do zrozumienia i zarządzania, jeśli nie jesteś czarodziejem nowego ".NET" -wiata. Mam nadzieję, że zostanie to oczyszczone i ustabilizowane w przyszłości. – ventiseis

+2

Jestem pewna, że ​​to się spełni i uradowałeś –