c# - ¿Cómo agregar la dependencia nativa externa dll?
fann (6)
- Haz click derecho en tu proyecto
- Elija Agregar, luego Referencia ...
- En la ventana del Administrador de referencias, haga clic en Examinar ... (ubicado en la parte inferior).
- Localiza tu .dll y luego presiona Agregar.
Tengo dos proyectos. El primero es un proyecto de aplicación Windows Forms y el segundo es un proyecto de biblioteca de clases. Proyecto de biblioteca de clase trabaja con FANN . Windows Forms es un proyecto de inicio.
Debería tener Fann.Net.dll y fanndoubleMT.dll para trabajar con la FANN. Descargué estas bibliotecas y las puse en una carpeta lib , ubicada en la raíz de la solución.
Agregué Fann.Net.dll como dll externo al proyecto de biblioteca de clases. Compilé el proyecto. Recibí un error que dice "No se puede cargar la DLL ''fanndoubleMT.dll''. Arreglo este error al agregar fanndoubleMT.dll a la carpeta Windows_Forms_Application / bin / Debug.
Creo que esta es una solución terrible para el problema, porque uso git, y cada vez que necesite transferir dll a esta carpeta en el nuevo lugar de trabajo.
Sinceramente, Denis.
No puede "Agregar referencia" a las dll no administradas. Una solución es agregar un evento posterior a la creación de su proyecto de Windows Forms. Algo como: xcopy .. / lib / fanndoubleMT.dll $ (TargetPath) El evento posterior a la compilación también puede ejecutar un archivo .cmd o .bat
Aún necesita la referencia al ensamblado administrado, ''Fann.Net.dll''
Puede agregar la dll nativa como un elemento vinculado y usar " Copiar si es más nuevo ".
El problema con las dll nativas, es que a veces querrá usar diferentes dlls de acuerdo con la configuración del proyecto (Depuración / Lanzamiento o plataforma).
Puede editar el archivo .csproj del proyecto y vincular la dll nativa de forma condicional:
<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>
Tenga en cuenta que la opción de copia se establece en PreserveNewest, que significa "copiar si es más reciente".
Puedes probar esto:
- Agregar / artículo existente, en lugar de Agregar referencia.
- Utilice Añadir como enlace.
- Asegúrese de que el elemento se va a copiar en la carpeta de compilación. En la propiedad de la biblioteca en VS, configure la Acción de compilación en Contenido y Copie en el Directorio de salida en Copiar si es más reciente.
- Hecho. Reconstruir y probar.
Sugerido en el enlace http://social.msdn.microsoft.com/Forums/en-US/1b1b316a-8648-4243-a651-84de51fd2508/reference-native-dll-from-managed-c-project?forum=vssmartdevicesvbcs .
Si la dll no está en el archivo bin del proyecto, debe permitir que se copie la dll.
Haz click derecho en tu dll
Haga clic en propiedades
Si el directorio Copiar a salida es No copiar , seleccione Copiar siempre
Reconstruir el proyecto. Va a aparecer.
¡La solución anterior escrita por liang solo funciona para una estructura de proyecto plana! Es posible que desee organizar todas sus DLL en su solución en una carpeta llamada "Dependecies". Pero tenga en cuenta que los archivos se copian en relación con la estructura del proyecto en el Explorador de soluciones. (probado con Visual Studio 2015)
- Cree dependencias de carpetas en su Explorador de soluciones
- Agregar / artículo existente, en lugar de Agregar referencia.
- Utilice Añadir como enlace.
- En la propiedad de la biblioteca en VS, configure la Acción de compilación en Contenido y Copie en el Directorio de salida en Copiar si es más reciente.
Ahora debería tener la siguiente estructura del Explorador de soluciones:
Your Project
- class1.cs
- Dependencies/Fann.Net.dll
- Dependencies/fanndoubleMT.dll
Añadir paso postbuild:
xcopy "$(TargetDir)/Dependencies" "$(TargetDir)" /s /e /h /Y
Esta solución que combina la adición de archivos al proyecto y la creación del paso posterior a la compilación tiene las siguientes ventajas:
- Proyecto bien organizado.
- No es necesario modificar el paso de compilación posterior si alguien agrega una nueva dependencia al explorador de soluciones más adelante,
- Si usa Subversion, se restablecerá la marca de solo lectura del archivo bloqueado en el repositorio