Problema:
Si agrega los archivos generados * .js a TFS, entonces TFS les protege contra escritura, si marca en, o no comprobar a cabo. Así que si cambia el archivo * Ts, no se puede generar el archivo * .js, porque el archivo está protegido contra escritura.
==> Error
Pero si no se comprueba en el archivo * .js se perderá si se ejecuta desplegar.
==> Compila error, pero en tiempo de ejecución
También, si lo necesita como un recurso incrustado, no se puede excluir el archivo ...
Problema adicional 1:
Si ejecuta "Volver a generar solución", Visual Studio quiere borrar el * .js generados por mecanografiado, antes de ejecutar la acumulación.
Sin embargo, esta acción no es posible, porque los archivos del * Js están protegidos contra escritura ...
==> Error
Problema adicional 2:
Dado que no es limpia "Construir", el pre-construyen los eventos no se ejecutan en limpio ...
Así que si se quita la protección contra escritura en la pre-construcción, que funcionará si "construir", pero se producirá un error si se elige "Reconstruir", independientemente de si lo haces en la solución o en el proyecto.
Problema adicional 3:
No se puede definir un comando evento de pre-limpieza en el Redactor configuración del proyecto.
Por lo tanto, esto es lo que puede hacer:
Ejecutar attrib -r /s(elimina la protección contra escritura) en su typescripted * .js como acción previa a la compilación.
p.ej
attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"
Esto funciona, porque * se expande:
- Si no existe el archivo, no hay ningún error, ya que no se ejecuta ningún comando.
- Si el archivo no existe, no hay ningún error, se ejecuta el comando.
Si desea ejecutarlo en un nombre de archivo, sería un error si no existe el archivo.
Ahora, tiene que editar el archivo de proyecto (* .csproj) con la mano, para agregar una acción pre-limpieza.
La acción pre-limpia es la misma que la acción previa a la compilación.
<Target Name="BeforeClean">
<!-- DO YOUR STUFF HERE -->
<Exec Command="attrib -r /s "$(ProjectDir)Resources/Scripts/0/*.js"" />
</Target>
Y hay que ir. Ahora puede comprobar los archivos * .js en, puede editar el archivo * Ts (que necesita para desproteger el * .js archivo o ejecute acumulación después)
Si desea que se ejecute en una base por archivo, el comando es:
if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)
o en XML-formulario:
<Exec Command="if EXIST "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js" (
attrib -r "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
)" />
Y en vez de eliminar el atributo de sólo lectura al por mayor en la acción previa a la compilación, también se puede comprobar los archivos individuales con la herramienta de TFS de línea de comandos:
"$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"
Por cierto, se puede encontrar una lista de macros VisualStudio / MSBUILD aquí:
https://docs.microsoft.com/en-us/cpp/ide/common-macros-for-build-commands-and-properties?view= vS-2017
Y para averiguar el valor real de la macro:
- haga clic derecho en su proyecto en el Explorador de soluciones, seleccione Propiedades
- seleccionar los Eventos de generación pestaña
- haga clic en la edición previa a la compilación o Editar posterior a la generación botón, o bien está bien
- En la ventana que aparece, haga clic en el Macros botón
- desplazarse por la lista hasta que se encuentre
ProjectDir, en el siguiente panel es su valor real
Además, en lugar de utilizar el evento de pre-construcción en el proyecto, se puede añadir el pago y envío de comandos como BeforeBuild-objetivo. De esta manera nadie puede quitar accidentalmente que si ponen algo en pre-construcción en-configuración del proyecto.
<Target Name="BeforeBuild">
<Exec Command=""$(DevEnvDir)CommonExtensions/Microsoft/TeamFoundation/Team Explorer/tf.exe" checkout /lock:none "$(ProjectDir)Resources/Scripts/0/leaflet.EasyAjax.js"" />
</Target>