2012-05-23 18 views
6

Estoy intentando insertar un dll no administrado en mi proyecto de consola. El espacio de nombre predeterminado del proyecto es Company.Project1Exe. El Nombre de ensamblado (salida exe) se nombra project1.exeCómo cambiar el espacio de nombre predeterminado para los recursos incrustados con MSBuild?

las DLL se añaden al proyecto mediante la opción Add as Link y están situados en una subcarpeta Libs\x86

Company.Project1Exe 
    | 
    |--Program.cs 
    |--Libs 
     |--x86 
      |-My1st.dll 
      |-My2nd.dll 

Se han añadido al proyecto mediante la opción Add as Link , por lo tanto, no se encuentran físicamente en la subcarpeta Libs.

Establecí la Acción de compilación de estos dos archivos dlls en 'Recurso incrustado'.

De forma predeterminada, MSBuild incrustará estos dlls utilizando DefaultNamspace.ExtendedNamespace.FileName donde ExtendedNamespace representa la estructura de directorios del proyecto.

Esto da como resultado que se incruste el recurso como Company.Project1.Libs.x86.My1st.dll y Company.Project1.Libs.x86.My2nd.dll respectivamente.

Quiero incrustar estos recursos usando el Nombre del ensamblado para que estén incrustados como Project1.Libs.x86.My1st.dll y Project1.Libs.x86.My2nd.dll respectivamente.

¿Cómo puedo hacer esto?

Respuesta

10

El único método que puede solucionar este problema es establecer el LogicalName del recurso incrustado. Por defecto cuando incrusta un recurso, se encuentra una entrada en el archivo de csproj similar a

<EmbeddedResource Include="path to embdedded resource"/> 

En el caso de los recursos que se agregan utilizando Add as Link, se encuentra un Link atributo adicional. En este caso, el atributo Link es la ruta del recurso en relación con la estructura del proyecto y el atributo Include es el que apunta a la ubicación del archivo en su máquina (en relación con su proyecto).

<EmbeddedResource Include="path to embdedded resource"/> 
    <Link>Libs\x86\My1st.dll</Link> 
</EmbeddedResource> 

el fin de obtener los conjuntos integrados utilizando un espacio de nombres diferente el atributo LogicalName se puede añadir a lo anterior que permite que uno de modificar el comportamiento msbuild predeterminado.

<EmbeddedResource Include="path to embdedded resource"/> 
    <Link>Libs\x86\My1st.dll</Link> 
    <LogicalName>$(TargetName).Libs.x86.My1st.dll</LogicalName> 
</EmbeddedResource> 

El inconveniente que parece, es que uno tendrá que hacer esto para cada recurso agregado. Sin embargo, hubiera preferido que esta convención se establezca de alguna manera tal que esta pueda ser la forma predeterminada de incrustar cualquier recurso en mi proyecto, es decir, usar el $(TargetName) como reemplazo del espacio de nombres predeterminado

+3

Usted se daría cuenta de que el nombre lógico debería podrá actualizarse desde la pestaña Propiedades al seleccionar el archivo, pero no es así. En cambio, uno tiene que editar el archivo del proyecto directamente. –

Cuestiones relacionadas