Вот мое решение - похоже на принятый ответ.
У нас была проблема с нашим контролем версий. Целевые файлы .cs доступны только для чтения, а T4 не работает.
Вот код, который запускает T4 во временной папке, сравнивает целевые файлы и копирует его только в случае таких же изменений. Это не решает проблему с файлами read.only, но, по крайней мере, это происходит не часто:
Transform.bat
ECHO Transforming T4 templates
SET CurrentDirBackup=%CD%
CD %1
ECHO %1
FOR /r %%f IN (*.tt) DO call :Transform %%f
CD %CurrentDirBackup%
ECHO T4 templates transformed
goto End
:Transform
set ttFile=%1
set csFile=%1
ECHO Transforming %ttFile%:
SET csFile=%ttFile:~0,-2%cs
For %%A in ("%ttFile%") do Set tempTT=%TEMP%\%%~nxA
For %%A in ("%csFile%") do Set tempCS=%TEMP%\%%~nxA
copy "%ttFile%" "%tempTT%
"%COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe" "%tempTT%"
fc %tempCS% %csFile% > nul
if errorlevel 1 (
:: You can try to insert you check-out command here.
"%COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe" "%ttFile%"
) ELSE (
ECHO no change in %csFile%
)
del %tempTT%
del %tempCS%
goto :eof
:End
Вы можете попытаться добавить команду извлечения в строке (:: Вы можете попробовать ....)
В вашем проекте установите это как действие предварительной сборки:
Path-To-Transform.bat "$(ProjectDir)"