tools instalar español argumentos msbuild

instalar - msbuild jenkins



¿Cómo puedo obtener la ruta del archivo msbuild actual? (1)

Estoy escribiendo un archivo .targets de msbuild, y en él quiero usar la tarea zip para comprimir algunos archivos que conozco en las ubicaciones relativas al archivo .targets.

Esto funciona bien cuando ejecuto el archivo .target directamente. Pero, cuando incluyo el archivo .targets en un archivo .proj que está en otro directorio, las rutas relativas se resuelven en relación al archivo .proj y no al archivo .targets.

¿Hay alguna manera de que pueda especificar rutas relativas que sean relativas al archivo en el que las he escrito?

He visto esta pregunta relacionada:

¿Cómo dar la ruta relativa en el archivo msbuild?

Una solución que he pensado es hacer lo siguiente. No lo he probado todavía. ¿Funcionará, hay una mejor manera?

mi.proj

<Import Project="../Somewhere/my.targets"/> <PropertyGroup> <MyTargetsYouAreHere>$(MSBuildProjectDirectory)/../Somewhere</MyTargetsYouAreHere> </PropertyGroup>

my.targets

<Message Text="my.targets is here ''$(MyTargetsYouAreHere)''" />


La forma en que funciona MSBuild al procesar archivos es leer todos los archivos y crear uno en la representación en memoria de todos esos archivos. Todo esto sucede antes de que se ejecute cualquier objetivo. Debido a esto cuando un objetivo se está ejecutando, no tiene idea de en qué archivo estaba contenido. Básicamente, no podrá usar rutas relativas dentro de los archivos .targets. La forma de lidiar con esta situación es asegurarse de que sus archivos .proj periféricos ( o la extensión que use ) declaren una propiedad conocida que su archivo .targets utiliza para resolver la ruta completa a los archivos compartidos.

Por ejemplo

Sample.targets

<Project ...> <Target Name="ExecTool"> <Exec Command="$(YourToolPath)tool.exe" /> </Target> </Project>

Build.proj

<Project ...> <PropertyGroup> <YourToolPath>$(MSBuildProjectDirectory)/../</YourToolPath> </PropertyGroup> <Import Project="../../../Sample.targets"/> </Project>

En una nota relacionada, hablé sobre la validación de dichas propiedades "compartidas" en mi blog hace un tiempo en Elements of Reusable MSBuild Scripts: Validation .

MSBuild v. 4.0 y superior

Si está utilizando MSBuild 4.0 (o superior), es decir, Visual Studio 2010 / .NET 4.0, (que puede apuntar a .NET 2.0 / 3.0 / 3.5) también. Entonces ahora tiene estas propiedades que se pueden usar para este propósito específico:

  • MSBuildThisFile
  • MSBuildThisFileDirectory
  • MSBuildThisFileDirectoryNoRoot