2011-05-07 10 views
5

cuando se refiere a un conjunto de biblioteca, se copia automáticamente en el directorio final del bin. Sin embargo, el * .dll.config no lo está, ¿hay alguna forma de copiar automáticamente este archivo de configuración?¿Podemos autocopiar el * .dll.config?

Respuesta

1

En Visual Studio, hay una sección de "propiedades" cuando tiene el archivo activo abierto. Para el App.config, tiene una propiedad llamada Copy to Output Directory, las opciones son

  • Do Not Copy
  • Copy if Newer
  • Copy Always

¿Quieres la segunda o la tercera opción.

+6

Pero esas opciones son para un archivo en un proyecto en la solución actual para entrar en el directorio bin; no para los dlls externos a los que podría hacer referencia usando la opción Agregar referencia. –

1

Con el host CLR predeterminado, solo un EXE puede tener un archivo .config. No DLL. Copiar un archivo .dll.config no debería tener sentido, a menos que usted abra y analice el archivo usted mismo de forma explícita. En ese caso, debe usar un nombre diferente para evitar confusiones.

+0

¿Por qué no puedo tener un archivo de configuración para dll? ¿Cuál es el problema con eso? Como sabrá, los sitios web de ASP.NET se compilan en dlls. ¿Estás diciendo que las configuraciones web no existen? – oleksii

+0

El problema es que no es compatible. ASP.NET es un host CLR diferente, tiene reglas diferentes. –

1

Tuve el mismo problema. Puede tener una situación en la que Propiedades no lo ayuden a copiar app.config donde lo necesite. Como cuando haces pruebas de unidades de integración. A continuación, puede tener dos opciones:

  1. uso posterior acumulación de eventos

    copia/Y “$ (ProjectDir) App.config” “.... \ test \ Debug \ $ (TargetFileName). config”

  2. copie manualmente el archivo de configuración de secciones libA.dll a libA.Test.dll

termino con el 2, ya que demostró ser más robusto para yo.

3

Cambie el nombre de la aplicación.config en el proyecto dll a [dllname] .dll.config. Cambie las propiedades del mismo archivo para "copiar siempre" y reconstruir. Funciona muy bien para mi También intenté agregar otra configuración a través del cuadro de diálogo Configuración en VS y se actualizó bien aunque ya no era app.config. BTW Uso de la actualización VS2013 3.

Otra forma de hacer algo similar es crear un archivo de enlace permanente con [dllname] .dll.config en la carpeta del proyecto y cambiar las propiedades para "copiar siempre" de esa manera todavía tiene su app.config como es normal, pero si la actualizó, también actualizará su archivo [dllname] .dll.config. La única advertencia real aquí es que podría no rastrear el enlace fijo cuando controle el control de fuente como TFS y podría sobrescribir accidentalmente el enlace. Pero, de nuevo, respeta los enlaces cuando "agrega y un elemento existente" como un enlace, por lo que puede funcionar o no para su situación. Tú decides.

1

Aunque llego tarde, pero mi respuesta puede ayudar a otros. He utilizado el siguiente comando como evento previo a la construcción:

copy /Y $(SolutionDir)\[YOUR_LIBRARY_PROJECT]\app.config $(ProjectDir)$(OutputPath)[YOUR_LIBRARY_NAME].dll.config

Traté de ser dinámico tanto como sea posible, y el comando anterior trabajé.

2

Hay una mejor respuesta en el siguiente mensaje:

Visual Studio/MSBuild copy referenced class library's app.config as *.dll.config to bin folder of current project

// Add this <ItemGroup> at the end of your .csproj file before </Project> and after <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
<ItemGroup> 
    <Content Include="app.config"> 
     <Link>$(TargetName).dll.config</Link> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
+1

No he intentado esto, pero parece que podría presentar problemas si quiere transformar el archivo en la implementación con guepardo lento. – emragins

Cuestiones relacionadas