Wprowadzenie
Przenośne problemy bibliotek klas mogą występować po zainstalowaniu programu Microsoft Visual Studio 2012 aktualizacji 2. W tym artykule opisano te problemy i ich rozwiązania.
Problem 1
Objawy
Kiedy używać zasobów zbudować projekt przenośny Biblioteka klas, po zainstalowaniu programu Visual Studio 2012 aktualizacji 2, może pojawić się następujący komunikat o błędzie:
"System.Type" nie zawiera definicji dla "Assembly" i ma rozszerzenie metody "Assembly" przyjmuje pierwszy argument typu "System.Type" można odnaleźć (czy brakuje using dyrektywa lub odwołania do zestawu?)
Uwaga Pojawi się błąd, gdy używasz Microsoft Visual C#.
"Assembly" nie jest członkiem "System.Type"
Uwaga Pojawi się błąd, gdy używasz programu Microsoft Visual Basic.
Ten problem występuje, gdy jeden z następujących platform jest zadanie w projekcie:
-
Microsoft.NET Framework 4.5 i .NET dla Sklepu Windows
-
.NET Framework 4.5 i Windows Phone 8
-
.NET Framework 4.5, .NET dla Sklepu Windows i Windows Phone 8
Obejście problemu
Aby obejść ten problem, należy naprawić kod generowany przez projektanta pliku zasobów. Aby to zrobić, kliknij dwukrotnie komunikat o błędzie, a następnie wykonaj następujące czynności:
Program Visual C#
-
Dodaj następujący za pomocą dyrektywy:
using System.Reflection;
-
Znajdź następujący kod:
typeof(Resource1).Assembly
Tego kodu zamień następujący kod:
typeof(Resource1).GetTypeInfo().Assembly
Następujący kod jest przykładem, którego dotyczy ten problem:
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]internal static global::System.Resources.ResourceManager ResourceManager { get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PortableClassLibrary2.Resource1", typeof(Resource1).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
Języka Visual Basic
-
Dodaj następujący za pomocą dyrektywy:
Imports System.Reflection;
-
Znajdź następujący kod:
GetType(Resource1).Assembly
Tego kodu zamień następujący kod:
GetType(Resource1).GetTypeInfo().Assembly
Następujący kod jest przykładem, którego dotyczy ten problem:
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("PortableClassLibrary1.Resource1", GetType(Resource1).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
Problem 2
Objawy
Nie można używać zasobów zbudować projekt przenośny Biblioteka klas, po zainstalowaniu programu Visual Studio 2012 aktualizacji 2. Ponadto może pojawić się jeden z wielu różnych komunikatów o błędach. Na przykład może pojawić się jeden z następujących komunikatów o błędzie:
Typu 'System.Net.HttpStatusCode' jest zdefiniowany w zestawie, który nie jest wywoływany. Należy dodać odwołanie do zestawu "System.Net, Version = 2.0.5.0, kultury = neutral, PublicKeyToken = 7cec85d7bea7798e Retargetable = Yes.
Nie można niejawnie przekonwertować typu 'System.Net.HttpStatusCode' ' System.Net.HttpStatusCode [%programfiles%\Reference Assemblies\Microsoft\Framework\. NETPortable\v4.5\Profile\Profile78\System.Net.Primitives.dll] "
Należy zauważyć, że ten problem występuje, gdy jeden z następujących platform jest zadanie w projekcie:
-
.NET Framework 4.5 i Windows Phone 8
-
.NET Framework 4.5, .NET dla Sklepu Windows i Windows Phone 8
Przyczyna
Ten problem występuje, ponieważ program Visual Studio 2012 aktualizacji 2 został zainstalowany po zainstalowaniu Windows Phone Software Development Kit (SDK) 8.0. W związku z tym zostały usunięte następujące pliki:
-
%programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile49\System.Net.dll
-
%programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile49\System.ServiceModel.dll
-
%programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile78\System.Net.dll
-
%programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile78\System.ServiceModel.dll
Obejście problemu
Aby rozwiązać ten problem, uruchom program naprawy programu Visual Studio 2012. Aby to zrobić, wykonaj następujące kroki:
-
Kliknij przycisk Start, kliknij polecenie Panel sterowania, kliknij Programy, a następnie kliknij pozycję Programy i funkcje.
-
Kliknij prawym przyciskiem myszy wersji programu Visual Studio 2012, który jest zainstalowany, a następnie kliknij przycisk Zmień.
-
Po otwarciu kreatora Visual Studio 2012 Instalatora, kliknij przycisk Napraw .
Uwaga: Jeśli ustawione w nowym środowisku autora, aby uniknąć tego problemu, należy zainstalować program Visual Studio 2012 aktualizacji 2 przed zainstalowaniem zestawu SDK systemu Windows Phone 8.0.
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.