ruta - server.mappath c# ejemplos
¿Cómo puedo obtener el directorio actual en el script msbuild? (3)
En mi script msbuild necesito pasar el directorio completo como un parámetro. ¿Cómo puede obtenerlo?
Ejemplo: estoy ejecutando el script desde C: / dev, quiero una ruta de acceso relativa temp, así que estoy detrás de C: / dev / temp
Nota: No sé desde qué carpeta se ejecutará el script.
Aquí hay 3 objetivos que son útiles.
WhereAmI es el que uso cuando trato de descubrir mi directorio actual, por supuesto. Los otros son informativos también. (Algunos más allá del alcance de la pregunta).
<Target Name="WhereAmI">
<Message Text=" Here I Am " />
<Exec Command="dir ." />
<Message Text=" " />
</Target>
<Target Name="ShowReservedProperties" AfterTargets="BeforeBuild">
<Message Text=" MSBuildProjectDirectory = $(MSBuildProjectDirectory)" Importance="high" />
<Message Text=" MSBuildProjectFile = $(MSBuildProjectFile)" Importance="high" />
<Message Text=" MSBuildProjectExtension = $(MSBuildProjectExtension)" Importance="high" />
<Message Text=" MSBuildProjectFullPath = $(MSBuildProjectFullPath)" Importance="high" />
<Message Text=" MSBuildProjectName = $(MSBuildProjectName)" Importance="high" />
<Message Text=" MSBuildBinPath = $(MSBuildBinPath)" Importance="high" />
<Message Text=" MSBuildProjectDefaultTargets = $(MSBuildProjectDefaultTargets)" Importance="high" />
<Message Text=" MSBuildExtensionsPath = $(MSBuildExtensionsPath)" Importance="high" />
<Message Text=" MSBuildStartupDirectory = $(MSBuildStartupDirectory)" Importance="high"/>
</Target>
<Target Name="ShowOtherProperties">
<Message Text=" " />
<Message Text=" " />
<Message Text=" Environment (SET) Variables* " />
<Message Text=" --------------------------- " />
<Message Text=" COMPUTERNAME = *$(COMPUTERNAME)* " />
<Message Text=" USERDNSDOMAIN = *$(USERDNSDOMAIN)* " />
<Message Text=" USERDOMAIN = *$(USERDOMAIN)* " />
<Message Text=" USERNAME = *$(USERNAME)* " />
</Target>
Si está utilizando un "archivo de msbuild externo" y necesita pasarle un nombre de archivo o ruta (porque a los archivos externos de msbuild no les gustan los archivos relativos si no están en el mismo directorio que el archivo de llamada .msbuild) .... aquí hay una Tarea conveniente (3.5 y hasta creo).
<ConvertToAbsolutePath Paths="../"> <!-- Some relative path here -->
<Output TaskParameter="AbsolutePaths" PropertyName="MyAbsolutionPathProperty"/>
</ConvertToAbsolutePath>
<Message Text="''MyAbsolutionPathProperty'' = ''$(MyAbsolutionPathProperty)''" />
MSBuild tiene una propiedad reservada llamada MSBuildProjectDirectory
, que se encuentra en la ruta absoluta del directorio donde se encuentra el archivo de script o proyecto, C: / Dev en su caso. Por lo tanto, "$(MSBuildProjectDirectory)/temp"
es exactamente lo que está buscando.
Igor es bastante cercano. MSBuildProjectDirectory
es la propiedad que le dará la ruta completa al archivo de proyecto que se invocó en la línea de comando. Entonces, si tienes los siguientes scripts:
- C: / temp / MyProj.proj
- C: / shared / shared.targets
Y MyProj.proj
importa shared.targets
y este es el que pasó a msbuild.exe, entonces el valor de MSBuildProjectDirectory
siempre será C: / temp incluso si hace referencia a ese dentro de shared.targets. Si sus objetivos compartidos requieren conocimiento de ruta, entonces estos deben declararse en propiedades conocidas. Por ejemplo, los archivos de proyecto C # definen el valor para OutputPath
y el archivo compartido Microsoft.Common.targets
usa esa propiedad.
Editar: MSBuild 4
Si está utilizando MSBuild 4, ahora puede usar las propiedades para este tipo de valor.
- MSBuildThisFile
- MSBuildThisFileDirectory
- MSBuildThisFileDirectoryNoRoot
- MSBuildThisFileExtension
- MSBuildThisFileFullPath
- MSBuildThisFileName
Ver http://sedodream.com/2010/03/11/MSBuild40ReservedProperties.aspx .