C#とVBで共有プロジェクトを使おうと思ったけど、コードのプラグマは #if と #if … Then の違いがあって微妙に違って共有できないので、XAMLファイルを共有しようかと思ってやってみました。そう、*.xaml ファイルだけ共有します。コードビハイドは、それぞれの *.cs, *.vb を参照させます。
以下、作成手順
- ユニバーサルアプリから、shared プロジェクトを引っこ抜く。
- *.shproj に、MainPage.xaml だけ追加する。
- MainPage.xaml のクラス名を「XamlShare.MainPage」のように共通で使えるように変更
- *.csproj をエディタで開いて、MainPage.xaml.cs から MainPage.xaml を連結させている箇所を消す。
- *.csproj をエディタで開いて、XamlShare.Shared.projitems への Import を追加する。
- 同様に *.vbproj から MainPage.xaml.cs から MainPage.xaml を連結させている箇所を消す
- *.vbproj をエディタで開いて、XamlShare.Shared.projitems への Import を追加する。
- C# と VB の namespace を揃える。
とやると、上記の形になります。これで C# のプロジェクトは無事コンパイルができるのですが、VB の場合は、
エラー 1 ファイル “obj\Debug\D:\work\blog\src\XamlShare\XamlShare.Shared\MainPage.xbf” を “bin\Debug\D:\work\blog\src\XamlShare\XamlShare.Shared\MainPage.xbf” にコピーできません。指定されたパスのフォーマットはサポートされていません。 XamlShare.VB
のような謎なエラーを残してビルドができません。obj\Debug\D:\work\… のように変な形でドライブがついてしまっているのでビルド型式がおかしくなっているんでしょうね。共有プロジェクトのために、Update 2 で C# のビルド型式に修正を入れたのだと思います。残念。
よく見ると、VB のほうにはユニバーサルアプリがないという結果に。
で、ユニバーサルアプリのある C++ ならば、と思ってやってみるとビルドが通りました。うまくいかなかったと思ったけど、どこか手順をミスしたみたい。
サンプルは XamlShare-v0.2-src.zip から。
これは「空のアプリ」になっているので、後で中身を追加してみましょう。