I have a GIT repository and I'm using Umbraco. Once strange thing that was happening to me were my files in the css folder kept on being modified even though I wasn't changing them. So every time I wanted to commit a change I'd have to undo the css file changes.
I thought this was Umbraco and because I had my style sheet linked to the rich text editor datatype, but it turned out to be the uSync package. I was synchronizing Stylesheets so by turning this off in the uSyncSettings.config file this stopped the problem. I don't need uSync to manage these files for me.
Monday, 31 March 2014
Umbraco Relationships Datatype
This is a great Umbraco package that helps manage node relationships in multilingual websites. It's just what I was looking for:
Vizioz Relationships Datatype for Umbraco
Vizioz Relationships Datatype for Umbraco
Labels:
Datatype,
Multilingual,
Relations,
Relationships,
umbraco
Wednesday, 19 March 2014
Umbraco fails to Publish! We get an exception within a load balanced environment.
After a deployment to our live servers which are load balanced we could not Publish. We could Save but not right-click publish or by clicking on the icon.
This was the error:
ERROR Umbraco.Web.UmbracoApplication - [Thread 36] An unhandled exception occurred
System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.TypeInitializationException: The type initializer for 'umbraco.presentation.cache.dispatcher' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at umbraco.presentation.cache.dispatcher..cctor()
--- End of inner exception stack trace ---
at umbraco.presentation.cache.dispatcher.Refresh(Guid factoryGuid, Int32 Id)
at umbraco.library.UpdateDocumentCache(Document doc)
at umbraco.cms.presentation.editContent.Publish(Object sender, EventArgs e)
at System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e)
at System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
This seemed to be an error with the distributed call from server 1 to server 2 in the load balancer.
This was the error:
ERROR Umbraco.Web.UmbracoApplication - [Thread 36] An unhandled exception occurred
System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.TypeInitializationException: The type initializer for 'umbraco.presentation.cache.dispatcher' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at umbraco.presentation.cache.dispatcher..cctor()
--- End of inner exception stack trace ---
at umbraco.presentation.cache.dispatcher.Refresh(Guid factoryGuid, Int32 Id)
at umbraco.library.UpdateDocumentCache(Document doc)
at umbraco.cms.presentation.editContent.Publish(Object sender, EventArgs e)
at System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e)
at System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
This seemed to be an error with the distributed call from server 1 to server 2 in the load balancer.
- First I thought it might be a rewrite rule in \config\UrlRewriting.config - it wasn't
- Then I recycled the app pools - this didn't help
- I then made sure I could access the Umbraco web service on both servers:
- http://serverip1/umbraco/webservices/CacheRefresher.asmx - worked
- http://serverip2/umbraco/webservices/CacheRefresher.asmx - worked
- I disabled distributed calls and then Publish worked, but this wasn't a solution
- Finally the solution was due to incorrect config in \config\umbracoSettings.config. I somehow didn't have the <user>0</user> tag:
<distributedCall enable="true">
<user>0</user>
<servers>
<server>serverip1</server>
<server>serverip2</server>
</servers>
</distributedCall>
These are some of the very useful posts I read, but config was my solution:
Friday, 14 March 2014
How do I copy files after Publish to the Publish folder using Visual Studio 2010 with MSBuild?
My web project in Visual Studio 2010 has post-build events that copies files from a folder into the bin directory of the web project. But when I publish my site, MSBuild seems to ignore the post-build events and these files are NOT copied.
The solution is to create a BAT file that executes from a MSBuild Target. I called my BAT file PostBuildEventPublish.bat and it lives in my solution folder. This is the BAT file contents:
xcopy "%1References\UmbracoCourier.lic" "%2" /y
xcopy "%1References\jumps.umbraco.usync.dll" "%2" /y
The parameters %1 and %2 are input from the MSBuild csproj file. In VS2010 unload your web project and edit the project then insert this Target (at the bottom):
<Target Name="AfterPublish" AfterTargets="CopyAllFilesToSingleFolderForPackage">
<Exec Command="$(SolutionDir)References\PostBuildEventPublish.bat "$(SolutionDir)" "$(ProjectDir)obj\$(Configuration)\Package\PackageTmp\bin"" />
<Message Importance="Normal" Text="Finished PostBuildEventPublish.bat" />
</Target>
Obviously change to the paths you want to use.
As you can see parameter %1 = $(SolutionDir)
and parameter %2 = $(ProjectDir)obj\$(Configuration)\Package\PackageTmp\bin
You will notice that my Target always gets executed before the actual publish files are copied.
C:\Dev\Puma\Main\References\PostBuildEventPublish.bat "C:\Dev\Main\" "C:\Dev\Puma\Main\Web\obj\Debug\Package\PackageTmp\bin"
C:\Dev\Puma\Main\References\UmbracoCourier.lic
1 File(s) copied
C:\Dev\Puma\Main\References\jumps.umbraco.usync.dll
1 File(s) copied
Finished PostBuildEventPublish.bat
Publish Pipeline Deploy phase Pre-Deploy CopyAllFilesToOneFolder Stage
Deleting existing files...
Publishing folder /...
Publishing folder App_Browsers...
Publishing folder App_Data...
Publishing folder App_Data/packages...
Publishing folder App_Data/packages/created...
Publishing folder App_Data/packages/installed...
...
Publishing folder uSync/Template/ZMag...
Publishing folder Views...
========== Build: 5 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========
So parameter %2 is where the magic happens. Here we copy the files into the temp publish folder and when Publish completes copying the files to the actual Publish folder these post-build files will also be copied.
The solution is to create a BAT file that executes from a MSBuild Target. I called my BAT file PostBuildEventPublish.bat and it lives in my solution folder. This is the BAT file contents:
xcopy "%1References\UmbracoCourier.lic" "%2" /y
xcopy "%1References\jumps.umbraco.usync.dll" "%2" /y
The parameters %1 and %2 are input from the MSBuild csproj file. In VS2010 unload your web project and edit the project then insert this Target (at the bottom):
<Target Name="AfterPublish" AfterTargets="CopyAllFilesToSingleFolderForPackage">
<Exec Command="$(SolutionDir)References\PostBuildEventPublish.bat "$(SolutionDir)" "$(ProjectDir)obj\$(Configuration)\Package\PackageTmp\bin"" />
<Message Importance="Normal" Text="Finished PostBuildEventPublish.bat" />
</Target>
Obviously change to the paths you want to use.
As you can see parameter %1 = $(SolutionDir)
and parameter %2 = $(ProjectDir)obj\$(Configuration)\Package\PackageTmp\bin
You will notice that my Target always gets executed before the actual publish files are copied.
C:\Dev\Puma\Main\References\PostBuildEventPublish.bat "C:\Dev\Main\" "C:\Dev\Puma\Main\Web\obj\Debug\Package\PackageTmp\bin"
C:\Dev\Puma\Main\References\UmbracoCourier.lic
1 File(s) copied
C:\Dev\Puma\Main\References\jumps.umbraco.usync.dll
1 File(s) copied
Finished PostBuildEventPublish.bat
Publish Pipeline Deploy phase Pre-Deploy CopyAllFilesToOneFolder Stage
Deleting existing files...
Publishing folder /...
Publishing folder App_Browsers...
Publishing folder App_Data...
Publishing folder App_Data/packages...
Publishing folder App_Data/packages/created...
Publishing folder App_Data/packages/installed...
...
Publishing folder uSync/Template/ZMag...
Publishing folder Views...
========== Build: 5 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========
So parameter %2 is where the magic happens. Here we copy the files into the temp publish folder and when Publish completes copying the files to the actual Publish folder these post-build files will also be copied.
Labels:
AfterPublish,
build,
copy,
CopyAllFilesToSingleFolderForPackage,
csproj,
Events,
exec,
MSBuild,
post,
post-build,
Publish,
target,
visual studio 2010
Friday, 21 February 2014
IIS7 not serving pages (ASPX) but just displays a blank page
I created a new IIS website with ApplicationPoolIdentity as the identity and .NET framework set to v4.0. In my hosts file I set my localhost to point to my test.dev domain (127.0.0.1 test.dev). When I tried viewing the site all I got back as a blank page.
What I tried:
1. Installing all IIS components as I thought I might have missed some - this didn't help
2. Add full control permissions to my web folder for the ApplicationPoolIdentity (http://stackoverflow.com/questions/7334216/iis7-permissions-overview-applicationpoolidentity) - this didn't help
3. Registered .NET 4 with this command: C:\Windows\Microsoft.NET\Framework\v4.0.30319 C:\Windows\Microsoft.NET\Framework\v4.0.30319> aspnet_regiis.exe -i - This WORKED!!!
What I tried:
1. Installing all IIS components as I thought I might have missed some - this didn't help
2. Add full control permissions to my web folder for the ApplicationPoolIdentity (http://stackoverflow.com/questions/7334216/iis7-permissions-overview-applicationpoolidentity) - this didn't help
3. Registered .NET 4 with this command: C:\Windows\Microsoft.NET\Framework\v4.0.30319 C:\Windows\Microsoft.NET\Framework\v4.0.30319> aspnet_regiis.exe -i - This WORKED!!!
Labels:
ApplicationPoolIdentity,
ASPX,
blank,
Folder,
IIS,
iis7,
Page,
Permissions
Wednesday, 12 February 2014
Umbraco render macro within macro
I wrote this helper method to easily render macros within other macros when using razor (cshtml) views. This also allows the passing in of parameters. This is an alternative to RenderMacroContent which didn't seem to work for me.
This is the code that wasn't working:
public static string RenderMacro(string alias, int nodeId, Dictionary<string string=> parameters)
{
var macroEngine = new RazorMacroEngine();
var macro = new MacroModel();
macro.ScriptLanguage = "cshtml";
macro.ScriptName = alias + ".cshtml";
foreach (var parameter in parameters)
{
macro.Properties.Add(new MacroPropertyModel(parameter.Key, parameter.Value));
}
return macroEngine.Execute(macro, new umbraco.NodeFactory.Node(nodeId));
}
This is the code that wasn't working:
umbraco.library.RenderMacroContent(string.Format("</?UMBRACO_MACRO>", alias, args), model.Id)
Friday, 26 July 2013
StyleCop and R# Integration
StyleCop and R# Integration
You can either write
your own rule library or use an existing extension like StyleCop+.
I’ve used StyleCop+ as it holds common rules and is an open source community project
so adding to it is easy. I’ve investigate the StyleCop+ rule SP2101
MethodMustNotContainMoreLinesThan below.
Versions
Visual Studio 2010
R# 5.1.3000.12 and 8.0.14.856
StyleCop 4.7.44.0 and 4.7.45.0
StyleCop+ 1.8
R# 8 and StyleCop with StyleCop+
R#8 will NOT work with StyleCop 4.7.44.0 only 4.7.45.0. If you want to use StyleCop+ 1.8 on top of this you need to change the assembly binding redirects in the Visual Studio 2010 config file (C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config).
Make sure VS is closed and the StyleCopPlus.dll in C:\Program Files (x86)\StyleCop 4.7 has been deleted.
Under this XML...
Add this XML...
Place the StyleCopPlus.dll back in C:\Program Files (x86)\StyleCop 4.7 and Unblock it. Now open VS and everything should work!
R# 8 and StyleCop with StyleCop+
R#8 will NOT work with StyleCop 4.7.44.0 only 4.7.45.0. If you want to use StyleCop+ 1.8 on top of this you need to change the assembly binding redirects in the Visual Studio 2010 config file (C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config).
Make sure VS is closed and the StyleCopPlus.dll in C:\Program Files (x86)\StyleCop 4.7 has been deleted.
Under this XML...
<runtime>
<UseSmallInternalThreadStacks enabled="true"/>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="StyleCop" publicKeyToken="f904653c63bc2738" />
<bindingRedirect oldVersion="4.5.0.0-4.5.99.99" newVersion="4.7.45.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="StyleCop.CSharp" publicKeyToken="f904653c63bc2738" />
<bindingRedirect oldVersion="4.5.0.0-4.5.99.99" newVersion="4.7.45.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="StyleCop.CSharp.Rules" publicKeyToken="f904653c63bc2738" />
<bindingRedirect oldVersion="4.5.0.0-4.5.99.99" newVersion="4.7.45.0" />
</dependentAssembly>
Place the StyleCopPlus.dll back in C:\Program Files (x86)\StyleCop 4.7 and Unblock it. Now open VS and everything should work!
R# Integration
With these versions installed you can edit the StyleCop+
rule SP2101 to reduce the lines from 120 to 20 to test its working. Open Settings.StyleCop
file (Located in folder of project(s) or solution) then go
to the StyleCop+ tab and select the rules to edit.
Open the R# options dialog and go to Code Inspection > Inspection Severity
and find the StyleCop+ rule to show as an error.
An you’re done!
Build Integration
You can use the MSBuild targets file (e.g. C:\Program
Files (x86)\MSBuild\StyleCop\v4.7\StyleCop.Targets) provided with
StyleCop to fail the build in Visual Studio for any
of the projects you set this up for. The problem with this is all
violations are set to error and you can’t target individual rules to break the
build.
The solution I think is to use TeamCity to read the XML
violations file (e.g. \obj\Debug\StyleCopViolations.xml)
generated after the build and then fail the CI build if it finds an individual
rule violation. For example if you find this in the file:
<Violation LineNumber="19" Source="C:\DevelopmentSVN\ATMS\Trunk\Isotrak.Zinc\Isotrak.Zinc.ATMS\Common\MapModelHelper.cs" RuleNamespace="StyleCopPlus.StyleCopPlusRules" Rule="MethodMustNotContainMoreLinesThan" RuleId="SP2101">Method body must not contain more than 20 code
lines (now 25).</Violation>
Subscribe to:
Posts (Atom)

