Odkopię swój problem, ponieważ jest to rzecz, której nie potrafię aktualnie rozwiązać. Otóż tworzę solution a w nim dwa projekty - jeden to biblioteka dll jako CLR->Class Library
, drugi to prosta aplikacja wykorzystująca zbudowaną bibliotekę dll. Bibliotekę ładuję na dwa sposoby i na moim komputerze wszystko działa jak należy, natomiast jeśli przeniosę aplikację na inny komputer to otrzymuje informację o błędzie ładowania biblioteki. Wszystkie mają zainstalowane .Nety do wersji 4, i nawet środowiska VS a mimo to dostaję monit o błędzie. Oto sposoby:
- Jeśli bibliotekę próbuję załadować poprzez Add References to u mnie wszystko działa jak należy. Po przeniesieniu aplikacji na inny komputer otrzymuję błąd:
Każde odwołanie do tej biblioteki to pojawienie się komunikatu (we właściwościach tej referencji zaznaczyłem aby plik został skopiowany do katalogu z exekiem):
System.IO.FileNotFoundException: Could not load file or assembly 'TestDLL.dll' or one of its dependencies. Nie można odnaleźć określonego modułu.
File name: 'TestDLL.dll'
- Drugi sposób to poprzez użycie Assembly.Load:
Żeby program chociaż się uruchomił to poniższy kod wrzuciłem pod przycisk (bibliotekę kopiuję ręcznie):
try
{
myAssembly = Assembly.LoadFrom("TestLibrary.dll");
myType = myAssembly.GetType("TestLibrary.SimpleMath");
WorkingObject = Activator.CreateInstance(myType);
foreach (MethodInfo info in myType.GetMethods())
{
Console.WriteLine("Metody: {0}", info.Name);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
GB_Test.Enabled = true;
}
Błąd:
Could not load file or assembly 'TestLibrary.dll' or one of its dependencies. Nie można odnaleźć określonego modułu.
Zawartość biblioteki dll:
//
// PLIK .h
//
#pragma once
using namespace System;
using namespace std;
namespace TestLibrary {
public ref class SimpleMath
{
public:
SimpleMath();
int Multiply(int _value);
};
}
//
// PLIK .cpp
//
#include "stdafx.h"
#include "TestLibrary.h"
using namespace TestLibrary;
SimpleMath::SimpleMath()
{
}
int SimpleMath::Multiply(int _value)
{
return _value * 100;
}
Biblioteka jak widać prosta i prostsza już być nie może. Nie wykorzystuję tutaj żadnych dodatkowych cudów. Ot taki prosty twór. Po zbudowaniu u mnie działa poprawnie a na innym komputerze nie działa.
Niestety potrzebuję napisać tą bibliotekę w C++ dlatego męczę się z tym i nie widzę rozwiązania.