Basa en el comentario de James Close, yo era capaz de escribir la siguiente plantilla para la depuración de mis rutas de archivos:
<#@ template language="C#" debug="true" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".txt"#><#
/////////Some standard-ish settings, continue reading on
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
/////////Below are the relevant sections I used for debugging
string solutionsPath = Host.ResolveAssemblyReference("$(SolutionDir)");//Gives you the location of MySolution.sln
string edmxFile = solutionsPath + "MyDAL/MyDAL/MyModel.edmx"; //Note - VS projects usually have a subdir with the same name as the sln, hence the repetition for MyDAL
#>
Does this file exist?
<#
//
if (File.Exists(edmxFile))
{
//Continue.
#>
Yes
<#
}
else
{
#>
No
<#
}
#>
Esto generará un archivo .txt y ayudará muy rápidamente a depurar si su ruta podría estar ubicado o no.
Como nota al margen, en los casos en que existía una ruta de directorios relativa (p.ej. ../App.config
) que no se podía ubicar, encontré que ayudó a poner un archivo (por ejemplo, test1.txt
) en cada nivel de directorio, como creí que Host.ResolvePath
no pudo ver fuera del ensamblaje actual con mi configuración. Esta advertencia puede ser confusa muy rápidamente ya que ../../App.config
podría resolverse a MySolution\App.config
, pero ../../MyDal/README.txt
no se resolverá (por lo tanto, el archivo no se encontrará), incluso si esa es la ruta correcta. El código anterior parece negar este problema por lo que puedo ver.
La solución anterior también podría ser una solución a este problema - How to use the poco entity generator
Al hacer referencia a la DLL por la ruta, se produce el problema que intento evitar. Una caja de desarrollo puede tener el proyecto en un lugar mientras que otro lo tiene en otro lugar. Si pudiera asumir la ubicación, entonces no tendría que tener la plantilla para determinarlo, podría codificarlo o inyectarlo con scripts de compilación. Trabajar en el modelo no es problema: mi script funciona perfectamente si codigo el camino. Solo necesito una forma de determinar dinámicamente ese camino. Usar Host.Resolve está bien si necesito la ruta de acceso de la plantilla, solo necesito encontrar la ruta para el origen del ensamblaje MyDAL. – Jaxidian
Host.ResolvePath (".") Funciona. :) – Jaxidian