System.io.filenotFoundException с использованием другой сборки в проекте CominteropC#

Место общения программистов C#
Ответить
Anonymous
 System.io.filenotFoundException с использованием другой сборки в проекте Cominterop

Сообщение Anonymous »

Я получаю следующее исключение при использовании другой сборки из сборки Cominterop: < /p>

system.io.filenotfoundexception: не может загрузить файл или сборку 'wpf.tools.csharp (...)'. Система не может найти указанный файл.

tl; dr
Основная сборка работает до того момента, как usercontrol из вторичной сборки используется в коде. Он отображается таким образом, поэтому сборка присутствует, найдена и загружается. .NET 8 WPF Class Library Project (C#): < /p>

Код: Выделить всё



net8.0-windows10.0.19041.0
x86
true
AnyCPU;x86
enable
true
enable







Он содержит интерфейс и класс:
isimplehost.cs:

Код: Выделить всё

using System.Runtime.InteropServices;

namespace Wpf.ComInterop
{
[ComVisible(true)]
[Guid("C2AFE629-B749-41E2-9F9E-98DF063A1D13")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ISimpleHost
{
void ShowWindow();

}
}
simplecominteropclass.cs:

Код: Выделить всё

using System.Runtime.InteropServices;
using System.Windows;

namespace Wpf.ComInterop
{

[ComVisible(true)]
[Guid("C3634287-1BFA-410A-BEE7-634F080E9682")]
[ClassInterface(ClassInterfaceType.None)]
public class SimpleComInteropClass : ISimpleHost
{

public SimpleComInteropClass()
{
}

public void ShowWindow()
{
try
{
var window = new SimpleWindow();
window.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(String.Format("Error showing window: {1}{0}{0}{2}", Environment.NewLine, ex.Message, ex.InnerException), "Error");
}
}
}

}
simplewindow.xaml:

Код: Выделить всё









< /code>
 Вторая сборка: wpf.tools.csharp < /h2>
Вторая сборка, предназначенная для использования основным, также является C# WPF Class Library Project: < /p>



net8.0-windows10.0.19041.0
AnyCPU;x86
enable
true
enable



< /code>
Он имеет единый пользовательский элемент управления: < /p>





< /code>
 build < /h2>
Эта сборка строит без ошибок. I generated and registered a Wpf.ComInterop.tlb
using dscom32, and registered the Wpf.ComInterop.comhost.dll using regsvr32.
Testing from a WPF Testbench
I built a simple WPF Application project that creates an instance of the Simplecominteropclass :

Код: Выделить всё

_simpleObject = new SimpleComInteropClass();
_simpleObject.ShowWindow();
< /code>
Это работает, как и ожидалось. Я создал эквивалентный проект в VB6. Сборка wpf_cominterop 
доступна в списке ссылок VB6 IDE, поэтому она была добавлена в проект в качестве ссылки. Используя Form1 по умолчанию, я добавил кнопку Command1 с этим обработчиком событий для нажатия кнопки Событие:

Код: Выделить всё

Private Sub Command1_Click()

Dim objWpf As New SimpleComInteropClass
objWpf.ShowWindow

End Sub
Когда я нажимаю кнопку, я получаю вышеупомянутое исключение:

MessageBox в ShowWindow (в SimpleCominterOpclass ) он отображается должным образом:

Код: Выделить всё

public void ShowWindow()
{
MessageBox.Show("SimpleComInteropClass.ShowWindow called");
try
{
var window = new SimpleWindow();
window.ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(String.Format("Error showing window: {1}{0}{0}{2}", Environment.NewLine, ex.Message, ex.InnerException), "Error");
}
}
Исключение возникает при создании SimpleWindow :

Код: Выделить всё

var window = new SimpleWindow();
, если я удалю инструмент ToolsUserControl () из SimpleWindow , окно отображается правильно, хотя и пусто.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... op-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»