2015-04-29 12 views
7

Od czasu aktualizacji 2 programu Visual Studio 2013 można tworzyć biblioteki klas przenośnych (PCL), które mogą odwoływać się do typów środowiska wykonawczego systemu Windows (co nie było możliwe wcześniej) pod warunkiem, że są kierowane tylko na Windows 8.1 i Windows Phone 8.1 i żadnych innych celów.Tworzenie F # PCL dla aplikacji Universal (takich jak aplikacje Store lub aplikacje Windows lub aplikacje WinRT)

Próbowałem to w C# dodając C# Class Library (Portable Universal Apps) i działa, co oznacza, że ​​można konsumować i wytwarzać rodzaje systemu Windows Runtime jak gdyby projekt był systemu Windows App lub Windows Runtime Component.

Ponieważ F # obsługuje również PCLS i Windows 8.1 i Windows Phone 8.1 są wspierane cele, chciałbym osiągnąć to samo z F # PCLS (jeśli to możliwe). Podczas gdy Visual Studio 2013 Update 4 nie oferuje tworzenia F # PCL, które są ukierunkowane tylko na Windows 8.1 i Windows Phone 8.1, możliwe jest zmodyfikowanie pliku .fsproj w F # PCL, aby dopasować plik .csproj C# PCL z te cele, które zostały utworzone za pomocą Visual Studio. Wymaga to zmiany elementów XML do następujących:

<TargetFrameworkVersion>v4.6</TargetFrameworkVersion> 
<TargetFrameworkProfile>Profile32</TargetFrameworkProfile> 

i dodanie następujących do <ItemGroup>

<TargetPlatform Include="WindowsPhoneApp, Version=8.1" /> 
<TargetPlatform Include="Windows, Version=8.1" /> 

Po tych zmianach, byłem w stanie konsumować i wytwarzać rodzaje systemu Windows Runtime w F # PCL jak w C# PCL (bez skarg Visual Studio w F # PCL lub C# (Universal) Windows App), ale kiedy faktycznie uruchomię (Universal) Windows App otrzymuję następujący wyjątek gdy funkcja wykorzystuje rodzajów Okna wykonawcze jest nazywane w f # PCL z C# (Universal) Okna aplikacji:

wyjątek typu „System.IO.FileNotFoundException” w module [nazwę aplikacji] .exe, ale nie było obsługiwane w kodzie użytkownika

Dodatkowe informacje: Nie można załadować pliku lub zestawu "Windows, wersja = 255.255.255.255, Culture = neutral, PublicKeyToken = null" lub jedna jego zależności. System nie może odnaleźć określonego pliku.

Kiedy sprawdzić referencje w Solution Explorer w Visual Studio C# PCL pokazuje odniesienie nazwie Okna, których brakuje F # PCL. Odniesienie Własności tym spojrzeniu odniesienia tak:

properties of Windows reference

Próbowałem ręcznie dodając to odniesienie do pliku .fsproj z F # PCL dodając

<Reference Include="C:\Program Files (x86)\Microsoft SDKs\Portable\v12.0\110C4FEFF2BA61C0746933A9ED6E248D\Windows.winmd" /> 

do <ItemGroup>.Po tym, odniesienie ma pokazać się w F # PCL w Solution Explorer z następującymi właściwościami referencyjnego:

enter image description here

ale nie rozwiąże problemu. Oznacza to, że nadal otrzymuję taki sam wyjątek jak poprzednio.

Spróbowałem także skopiować i wkleić odniesienie Windows za pośrednictwem menu kontekstowego Eksploratora rozwiązań w Visual Studio, ale narzeka z komunikatem o błędzie.

Czy wiesz, jak poprawnie dodać odniesienie do Windows do F # PCL? To byłoby naprawdę niesamowite, ponieważ umożliwiłoby to napisanie (Universal) Windows Apps prawie w całości w F #! Jeśli wiesz, że nie jest to możliwe, czy możesz wyjaśnić, co uniemożliwia taką możliwość?

EDIT: ulepszone formatowanie wiadomości wyjątków

+0

Jakieś aktualizacje? Chcę również mieć biblioteki F # obsługujące moją uniwersalną aplikację dla systemu Windows 10. –

Odpowiedz

1

Robisz przenośny bibliotekę klas. F # nie obsługuje aplikacji sklepu Windows, więc jedynym sposobem użycia F # w takiej sytuacji jest wywołanie go z C#. Jeśli uda ci się odnieść sukces, będziesz pierwszym z każdego.