2009-11-21 11 views
16

¿Hay alguna manera de utilizar MSBuild Extension Pack con una referencia "local" que no requiera que ejecute el instalador? En otras palabras, ¿puede almacenar los objetivos en una carpeta de elementos de solución para que cada desarrollador no tenga que instalarla?¿Es posible usar MSBuild Extension Pack sin instalación?

+1

El nombre para ese tipo de "instalación" se llama "implementación xcopy" –

+0

Mi último comentario es un poco pobre en gramática. Lo siento, tengo sueño ... –

+0

No sigo. Me preguntaba si puede hacer referencia a las extensiones de MSBuild en cualquier ubicación de la máquina, sin ejecutar el msi para instalar las extensiones. – Bob

Respuesta

20

Tiene que declarar la propiedad, ExtensionTasksPath, antes de la declaración de importación para las tareas. Por ejemplo echar un vistazo a:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">E:\Data\Development\My Code\Community\MSBuild\ExtensionPack\</ExtensionTasksPath> 
    </PropertyGroup> 

    <Import Project="$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks"/> 

    <Target Name="Demo"> 
    <MSBuild.ExtensionPack.FileSystem.File TaskAction="GetTempFileName"> 
     <Output TaskParameter="Path" PropertyName="TempPath"/> 
    </MSBuild.ExtensionPack.FileSystem.File> 

    <Message Text="TempPath: $(TempPath)" /> 
    </Target> 

</Project> 

Las tareas de MSBuild Comunidad es similar, pero la propiedad se denomina MSBuildCommunityTasksLib. Creo que para tareas SDC se llama TasksPath.

+0

¡Gracias! Acabo de ver tus episodios de DNRtv en MSBuild y fueron fantásticos. – Bob

2

Tuve problemas para hacer que esto funcione con rutas relativas (es decir, no c: \ blah pero ... \ blah).

Esto se debe a que no se pudo volver a utilizar la variable ExtensionTasksPath si era relativa, ya que su archivo (.csproj) y el archivo MsBuild.ExtensionPack.tasks están en diferentes ubicaciones, lo que da como resultado un valor diferente para el camino.

Al final esto es lo que tengo trabajo para mí (poner en la parte superior de su archivo .csproj):

<PropertyGroup> 
    <ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">..\4.0\</ExtensionTasksPath> 
    </PropertyGroup> 
    <Import Project="..\references\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/> 

La razón por la que necesita el ".. \ 4.0 \" en lugar de sólo " "(en blanco) es porque el archivo MsBuild.ExtensionPack.tasks detecta en blanco y hace algunas cosas diferentes si ese es el caso. No quería hackear el archivo MsBuild.ExtensionPack.tasks en caso de que quisiera actualizarlo más tarde.

+0

Esto funcionó para mí. ¡Gracias! –

Cuestiones relacionadas