0

メインページが空白の app.xaml で、実際の mainwindow.xaml のみを (viewmodellocator を使用して) 実行する場合に、wpf mvvm プロジェクトを作成しました。このプロジェクトは正常に動作します。exe として複数回実行しました。クラス ライブラリを作成し、ビルドしました。

今、私は別のプロジェクトを持っています。そのために、作成したdllを参照しました。wpfページを実行したいだけです。私は適切な解決策を求めて数日間探していましたが、ResourceDirectory とフォーラムで提示されたものを調べました-

        Assembly a = Assembly.Load(System.IO.File.ReadAllBytes("ExportCheck.dll"));           
        UserControl UserContrl = (UserControl)a.CreateInstance("ExportCheckInstance");
        UserContrl.Show();

他のことも試しましたが、wpfを実行するだけではないようです。私は今とても立ち往生しているので、あなたが提供できる助けをいただければ幸いです. ありがとう。

4

1 に答える 1

0

ExportCheck.dll参照されたプロジェクトで参照されていない(Copy Local True)と思いますか?

そうであれば、Uri パスから DLL をロードする必要があります。

 var asemblyPath = @"C:\MyDevCodeBase\AssetMVVMSample\Asset1MVVMPool\bin\Debug";
 var assemblyName = "Asset1MVVMPool"
 var myViewModel = "Asset1MVVMPool.List.ViewModels.Asset1ListViewModel, Asset1MVVMPool, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"

 var newAsmbly = Assembly.LoadFrom(assemblyPath + @"\" + assemblyName + ".dll");
 if (!string.IsNullOrEmpty(myViewModel))
        {
            var type = newAsmbly.GetTypes().FirstOrDefault(
                t => t.AssemblyQualifiedName == viewModelFullName);
            var currentViewModel 
                = Activator.CreateInstance(type) as IBaseViewModel;
            return currentViewModel;
        }

編集

Copy Local True を使用して既に参照されているアセンブリについては、次のコードを使用します...

      var myasmbly = Assembly.GetExecutingAssembly().GetReferencedAssemblies().Where(
           asmbly => asmbly.Name  == "Export.dll").FirstOrDefault();
      if (!string.IsNullOrEmpty(myViewModel))
        {
            var type = myasmbly.GetTypes().FirstOrDefault(
                t => t.AssemblyQualifiedName == viewModelFullName);
            var currentViewModel 
                = Activator.CreateInstance(type) as IBaseViewModel;
            return currentViewModel;
        }
于 2012-10-22T10:33:16.057 に答える