Danil, Apologies for not checking in. Thought I was getting e-mail alerts on this.
Windows 2008 Server (running as a desktop) Visual Studio 2008 (version 9.0.30729.1 SP) Visual SVN 1.6.1 T4Toolbox 9.1.20.1 (current as of today) The reproduction scripts will be hard to explain as I didn't build them myself. I think the three templates at the bottom should do it but basically, any template that calls RenderToFile seems to start the whole thing. I mentioned the AppDomain problem in the T4Toolbox discussion board. Both the creator and myself are confused, though he seems to have a better grasp of the problem. Here's an excerpt of his comment: "I followed the ActiveWriter thread and don't understand how their patch can work. How can the EnvDTE code executing on the thread pool in a temporary appdomain be marshalled to the default appdomain? The EnvDTE code doesn't have this problem with Visual SourceSafe and Team Foundation Server source control providers." Here is the template that launches the template generation: -------------------------------- <#@ template language="C#" hostspecific="True" debug="True" #> <#@ import namespace="System.Collections.Specialized" #> <#@ output extension="txt" #> <#@ include file="T4Toolbox.tt" #> <#@ include file="ScaffoldingGenerator.tt" #> <# /////////////////////////////////////////////////// // Set your domain object details below and simply save this file to auto-generate the scaffolding // Domain name should be PascalCaseSingular string domainObjectName = "Artist"; // Properties should be name/value pairs representing the property- name/data-type of the properties; property names should be PascalCase NameValueCollection properties = new NameValueCollection(); properties.Add("Title", "string"); properties.Add("Artist", "string"); properties.Add("Album", "string"); properties.Add("Genre", "string"); /////////////////////////////////////////////////// ScaffoldingGenerator generator = new ScaffoldingGenerator( @"e:\code\Suvius\Flamingo\", "Flamingo", domainObjectName, properties); generator.Run(); #> -------------------------------- Here is the generator template: <#@ include file="Pluralizer.tt" #> <#@ include file="ScaffoldingEnums.tt" #> <#@ include file="./Templates/BaseTemplate.tt" #> <#@ include file="./Templates/Controllers/ControllerTemplate.tt" #> <#@ include file="./Templates/Core/DomainObjectTemplate.tt" #> <#@ include file="./Templates/Data/NHibernateMaps/ClassMapTemplate.tt" #> <#@ include file="./Templates/Tests/Controllers/ ControllerTestsTemplate.tt" #> <#@ include file="./Templates/Tests/Core/DomainObjectTestsTemplate.tt" #> <#@ include file="./Templates/Web/Views/DomainObjectFormTemplate.tt" #> <#@ include file="./Templates/Web/Views/CreateTemplate.tt" #> <#@ include file="./Templates/Web/Views/EditTemplate.tt" #> <#@ include file="./Templates/Web/Views/IndexTemplate.tt" #> <#@ include file="./Templates/Web/Views/IndexCodeBehindTemplate.tt" #> <#@ include file="./Templates/Web/Views/IndexDesignerTemplate.tt" #> <#@ include file="./Templates/Web/Views/ShowTemplate.tt" #> <#@ include file="./Templates/Web/Views/GeneralCodeBehindTemplate.tt" #> <#@ include file="./Templates/Web/Views/GeneralDesignerTemplate.tt" #> <#@ import namespace="System.IO" #> <#+ public class ScaffoldingGenerator : Generator { public ScaffoldingGenerator(string projectRootPath, string solutionName, string domainObjectName, NameValueCollection properties) : this(projectRootPath, solutionName, domainObjectName, properties, null) { } public ScaffoldingGenerator(string projectRootPath, string solutionName, string domainObjectName, NameValueCollection properties, ArtifactToGenerate[] artifactsToGenerate) { this.solutionRootFolder = projectRootPath + "app\\"; this.scaffoldingOutputFolder = projectRootPath + "tools\ \CrudScaffolding\\"; this.testsRootFolder = projectRootPath + "tests\\"; this.logsPath = projectRootPath + "logs\\"; this.solutionName = solutionName; this.domainObjectName = domainObjectName; this.properties = properties; this.artifactsToGenerate = artifactsToGenerate; } protected override void RunCore() { // Get rid of the existing generation log File.Delete(logsPath + LOG_FILE_NAME); GenerateClassMap(); } private void GenerateClassMap() { string fileName = domainObjectName + "Map.cs"; string targetPath = solutionRootFolder + solutionName + ".Data\ \NHibernateMaps\\"; if (DidRequestToGenerate(ArtifactToGenerate.ClassMap)) { if (! Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); Log("Added directory " + targetPath); } if (! File.Exists(targetPath + fileName)) { ClassMapTemplate classMapTemplate = new ClassMapTemplate(solutionName, domainObjectName, properties); classMapTemplate.RenderToFile(fileName); File.Move(scaffoldingOutputFolder + fileName, targetPath + fileName); Log("Added file " + targetPath + fileName); } else { Log("File already exists " + targetPath + fileName); } } else { Log("Skipped generation of class map"); } } private string DomainObjectNamePlural { get { return Pluralizer.ToPlural(domainObjectName); } } private void Log(string message) { StreamWriter streamWriter = File.AppendText(logsPath + LOG_FILE_NAME); streamWriter.WriteLine(DateTime.Now.ToLongTimeString() + "\t" + message); streamWriter.Close(); } private readonly string logsPath; private readonly string testsRootFolder; private readonly string scaffoldingOutputFolder; private readonly string solutionRootFolder; private readonly ArtifactToGenerate[] artifactsToGenerate; private readonly string solutionName; private readonly string domainObjectName; private readonly NameValueCollection properties; private const string LOG_FILE_NAME = "CrudScaffolding.log"; } #> ------------------------------ And here is the actual template that is used to generate the class: <#@ import namespace="System.Collections" #> <#+ public class ClassMapTemplate : BaseTemplate { public ClassMapTemplate(string solutionName, string domainObjectName, NameValueCollection properties) : base(solutionName, domainObjectName, properties) { } protected override void RenderCore() { #> using <#= SolutionName #>.Core; using FluentNHibernate; using FluentNHibernate.Mapping; using SharpArch.Data.NHibernate.FluentNHibernate; namespace <#= SolutionName #>.Data.NHibernateMappings { public class <#= DomainObjectName #>Map : ClassMap<<#= DomainObjectName #>>, IMapGenerator { public <#= DomainObjectName #>Map() { WithTable("<#= DomainObjectNamePlural #>"); Id(x => x.ID) .WithUnsavedValue(0) .GeneratedBy.Identity(); <#+ PushIndent("\t\t\t"); foreach (string propertyName in Properties.AllKeys ) { WriteLine("Map(x => x." + propertyName + ");"); } PopIndent(); #> } #region IMapGenerator Members public System.Xml.XmlDocument Generate() { return CreateMapping(new MappingVisitor()); } #endregion } } <#+ } } #> On Jan 9, 4:51 am, "VisualSVN Team" <supp...@visualsvn.com> wrote: > Hello! > > Thanks for your interest in VisualSVN! > > > I'm getting a VisualSVN error when I try to run a T4 template that > > usesT4Toolbox(www.codeplex.com/T4Toolbox). > > Could you please provide us with detailed information about your > configuration? What versions of > * Windows, > * Visual Studio, > * VisualSVN and > *T4Toolboxyou are using? > > The detailed reproduction script will be helpful too. Please keep in > mind that we're not familiar withT4Toolbox. > > > The error is: > > > Error 1 Running transformation: System.EntryPointNotFoundException: > > Most likely the problem is on theT4Toolbox'sside. Looks like they > call Visual Studio API from "another AppDomain" that is not allowed. > Could you please contactT4Toolbox'steam and ask them to check this? > > Looking forward for detailed configuration information and reproduction > scripts. > > -- > With best regards, > Danil Shopyrin > VisualSVN Team > > > Entry point was not found. > > at VisualSVN.VS.Interop.NativeExtenderCallback.OnQueryEditFiles > > (UInt32 rgfQueryEdit, String[] rgpszMkDocuments, UInt32* > > pfEditVerdict, UInt32* prgfMoreInfo, Boolean* skipOriginal) > > at VisualSVN.VS.Interop.NativeExtender.OnQueryEditFiles > > (NativeExtender* , UInt32 rgfQueryEdit, Int32 cFiles, UInt16** > > rgpszMkDocuments, UInt32* rgrgf, > > __MIDL___MIDL_itf_ivsqueryeditquerysave2_0000_0001* rgFileInfo, > > UInt32* pfEditVerdict, UInt32* prgfMoreInfo, Boolean* skipOriginal) > > at EnvDTE.ProjectItems.AddFromFile(String FileName) > > at > > Microsoft.VisualStudio.TextTemplating77FDAC4A39299DDBABC76D1B2340818A.GeneratedTextTransformation.TransformationContext.SaveOutputToFile > > (String fileName, String content) in c:\Program Files\T4 Toolbox > > \T4Toolbox\TransformationContext.tt:line 266 > > at > > Microsoft.VisualStudio.TextTemplating77FDAC4A39299DDBABC76D1B2340818A.GeneratedTextTransformation.Template.RenderToFile > > (String fileName) in c:\Program Files\T4 Toolbox\T4Toolbox > > \Template.tt:line 80 > > at > > Microsoft.VisualStudio.TextTemplating77FDAC4A39299DDBABC76D1B2340818A.GeneratedTextTransformation.ScaffoldingGenerator.GenerateDomainObjectAndTests > > () in c:\projects\Suvius\Flamingo\tools\CrudScaffolding > > \ScaffoldingGenerator.tt:line 106 > > at > > Microsoft.VisualStudio.TextTemplating77FDAC4A39299DDBABC76D1B2340818A.GeneratedTextTransformation.ScaffoldingGenerator.RunCore > > () in c:\projects\Suvius\Flamingo\tools\CrudScaffolding > > \ScaffoldingGenerator.tt:line 42 > > at > > Microsoft.VisualStudio.TextTemplating77FDAC4A39299DDBABC76D1B2340818A.GeneratedTextTransformation.Generator.Run > > () in c:\Program Files\T4 Toolbox\T4Toolbox\Generator.tt:line 68 > > at > > Microsoft.VisualStudio.TextTemplating77FDAC4A39299DDBABC76D1B2340818A.GeneratedTextTransformation.TransformText > > () in c:\projects\Suvius\Flamingo\tools\CrudScaffolding > > \ScaffoldingGeneratorCommand.tt:line 24 C:\projects\Suvius\Flamingo > > \tools\CrudScaffolding\ScaffoldingGeneratorCommand.tt 1 1 > > > This seems very similar to the issues with ActiveWriter and VisualSVN > > described > > here:http://groups.google.com/group/visualsvn/browse_thread/thread/ada83dc... > > > I've verified that uninstalling VisualSVN solved my problem but > > wouldn't mind keeping both it andT4Toolbox. I've tried going through > > theT4Toolboxcode but can't make any sense of it as I'm new to > > templating. But I'm using a project that has templates and need to > > uninstall VisualSVN every time I deal with it.