2012-08-02 30 views
10

Estoy tratando de hacer referencia a MSBuildTasks desde un archivo MSBuild, y no estoy seguro de cómo hacerlo al usar NuGet para MSBuildTasks.Hace referencia a MSBuildTasks del paquete Nuget

La referencia dice que use

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 

cuando se ha instalado MSBuildTasks utilizando el archivo msi. Sin embargo, al instalar desde NuGet, lo coloca en una subcarpeta que contiene la versión, por lo que si actualizo MSBuildTasks se romperá la ruta en el archivo de compilación. ¿Cuál es la mejor manera de hacer referencia a MSBuildTasks cuando se instala a través de NuGet?

Respuesta

6

Recientemente lo configuré para resourcelib, usando MSBuildTasks versión 1.4.0.45. En esta versión, agregarlo al proyecto dio como resultado que el DLL se colocara en un subdirectorio "Build", que parece que necesita registrarse. Intenté que se descargara automáticamente, pero si se hace referencia a él en un archivo de proyecto, necesita estar allí desde el principio.

Para añadirlo al proyecto, he utilizado el siguiente código:

<PropertyGroup> 
    <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\Build</MSBuildCommunityTasksPath> 
</PropertyGroup> 
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/> 

Aquí MSBuildProjectDirectory se está utilizando para que pueda ser construido con MSBuild en la línea de comandos.

+3

Esta respuesta fue muy útil, pero encontré que el directorio donde NuGet coloca el archivo de objetivos es actualmente: '$ (SolutionDir) \. Build', por lo que si la configuración anterior no funciona, recomiendo actualizar la respuesta a establezca lo siguiente: ' $ (SolutionDir) \. build' – providencemac

+2

Parece que el script de PowerShell en el paquete NuGet que agrega la carpeta '.build' se ha eliminado desde la versión 1.5, pero el 'Getting Started 'guía todavía sugiere usarlo. He planteado un [problema] (https://github.com/loresoft/msbuildtasks/issues/258). – Neo

5

Solo tirando esto aquí en caso de que alguien más se enfrente nuevamente a este problema. Parece que cuando instala MSBuildCommunityTasks a través de NuGet, se agrega una carpeta .build a la solución, que se recomienda registrar con el código fuente. Sin embargo, el archivo MSBuild.Community.Tasks.targets tiene un elemento <MSBuildCommunityTasksPath>, que apunta a la carpeta c: \ Archivos de programa (x86), que es incorrecta. Esta carpeta es válida cuando instala MsBuildCommunityTasks usando un MSI. Esto no es válido en el caso de Nuget, que instala MsBuildCommunityTasks en la carpeta de paquetes de su solución. Así que acabé modificando el archivo .targets, y ha cambiado para que apunte a MSBuildCommunityTasksPath:

<MSBuildCommunityTasksPath>$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools</MSBuildCommunityTasksPath> 

Aún no dados. Así que, finalmente, me acaba de editar por el archivo de proyecto web, y ha cambiado el elemento de importación para MSBuildCommunityTasks a esto:

<Import Project="$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools\MSBuild.Community.Tasks.Targets"/> 

Esto funciona, ya que le dice directamente el proyecto para buscar el archivo en la carpeta .Targets paquetes. Tenga en cuenta que si actualiza la versión MSBuildTasks, tendrá que cambiar el elemento Importar. Soy un novato de MsBuild, así que si alguien me puede decir cómo automatizar esto, ¡sería genial!

+0

¿Por qué no tener ''? Supervisión en tu respuesta tal vez. – HankCa

Cuestiones relacionadas