J'ai deux projets. Le premier est un projet d'application Windows Forms et le second est un projet de bibliothèque de classes. Un projet de bibliothèque classique fonctionne avec FANN . Windows Forms est un projet de démarrage.
Je devrais avoir Fann.Net.dll et fanndoubleMT.dll pour travailler avec le FANN. J'ai téléchargé ces bibliothèques et les ai placées dans un dossier lib, situé à la racine de la solution.
J'ai ajouté Fann.Net.dll en tant que dll externe au projet de bibliothèque de classes. J'ai compilé le projet. J'ai reçu une erreur indiquant «Impossible de charger DLL 'fanndoubleMT.dll'. J'ai résolu cette erreur en ajoutant fanndoubleMT.dll dans le dossier Windows_Forms_Application\bin\Debug.
Je pense que ceci est une solution terrible au problème, parce que j'utilise git, et chaque fois que vous devez transférer des dll dans ce dossier sur le nouveau lieu de travail.
Cordialement, Denis.
Vous pouvez essayer ceci:
Suggéré dans le lien http://social.msdn.Microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum= vssmartdevicesvbcs .
Vous pouvez ajouter la DLL native en tant qu'élément lié et utiliser " Copier si plus récent ".
Le problème avec les dll natives, est que parfois vous voudrez utiliser différentes dll en fonction de la configuration du projet (Debug/Release ou plateforme).
Vous pouvez éditer le fichier .csproj du projet et lier la dll native de façon conditionnelle:
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
<Content Include="..\..\..\..\..\bin\Win32\Release\fanndoubleMT.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
<Content Include="..\..\..\..\..\bin\Win32\Debug\fanndoubleMT_d.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<Content Include="..\..\..\..\..\bin\x64\Debug\fanndoubleMT_d.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<Content Include="..\..\..\..\..\bin\x64\Release\fanndoubleMT.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Notez que l'option de copie est définie sur PreserveNewest qui signifie "copie si nouvelle".
Vous ne pouvez pas ajouter de référence aux dlls non gérées .. Une solution consiste à ajouter un événement post-construction à votre projet Windows Forms ..__ L'événement post-build peut également exécuter un fichier .cmd ou .bat
Vous avez toujours besoin de la référence à l'assembly géré, 'Fann.Net.dll'
La solution ci-dessus écrite par liang ne fonctionne que pour la structure de projet plat! Vous souhaiterez peut-être organiser toutes vos DLL de votre solution dans un dossier nommé "Dependecies". Attention, les fichiers sont copiés par rapport à la structure du projet dans l'Explorateur de solutions. (testé avec Visual Studio 2015)
Vous devriez maintenant avoir la structure suivante de Solution Explorer:
Your Project
- class1.cs
- Dependencies\Fann.Net.dll
- Dependencies\fanndoubleMT.dll
Ajouter l'étape postbuild:
xcopy "$(TargetDir)\Dependencies" "$(TargetDir)" /s /e /h /Y
Cette solution combinant l'ajout de fichiers au projet et la création d'une étape de post-génération présente les avantages suivants:
Si la dll ne se trouve pas dans le fichier bin du projet, vous devez autoriser sa copie.
Clic droit sur votre dll
Cliquez sur les propriétés
Si le répertoire de copie vers la sortie est Ne pas copier , sélectionnez Copier toujours
Reconstruisez le projet. Il va apparaître.