Hi!

VisualSVN release 1.6.3 is available.

*Fixed: VisualSVN crashes with T4 Toolbox.

You can download it from our site: http://www.visualsvn.com/visualsvn/download/.
On Sat, Mar 7, 2009 at 10:20 PM, Kyle Baley <kyle.ba...@gmail.com> wrote:
>
> I had a chance to test this and I'm no longer getting any errors.
> Seems to work! Thanks.
>
>
> On Mar 2, 4:12 am, VisualSVN Support <supp...@visualsvn.com> wrote:
>> Hi Kyle!
>>
>> We're trying to enable VisualSVN to support T4Tollbox template. Please
>> try this special development 
>> build:http://www.visualsvn.com/files/VisualSVN-1.6.2.18026.msi
>>
>> Note that this is not an official release and it's intended for
>> testing of new features only.
>>
>> Please let us know if you will find any problems with that build.
>>
>> Looking forward for your feedback.
>>
>> On Mon, Feb 2, 2009 at 5:25 PM, Kyle Baley <kyle.ba...@gmail.com> wrote:
>>
>> > 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
>>
>> ...
>>
>> read more »
>



-- 
With best regards,
Olga Dolidze
VisualSVN Support

Reply via email to