Having at last got an Asp.Net Mvc 4 project template working on the Mac/Xamarin/Mono, I came to grief again when deploying it to a Windows hosted server. The problem is that whereas mono works without Microsoft.Web.Infrastructure.dll (and indeed is likely to give errors if you have it), for hosting on Windows you must re-include it.
So my deploy process now includes putting Microsoft.Web.Infrastructure.dll back in the web application bin/ directory; and now I can develop on the Mac and deploy to a Windows Server.
Use P4Merge as the Merge Tool for Mercurial Windows
Whenever I do a Mercurial merge on Windows I get a little Visual Studio Dialog popup saying File -nosplash not found. Which is annoying. Especially as I have Perforce's excellent p4merge installed.
You can set the merge tool used by Mercurial like so:
[shell]Edit %userprofile%\Mercurial.ini[/shell]
where Edit is your favourite text editor, and %userprofile% is usually C:\Users\username\.
Then add this section to your Mercurial.ini file:
[code][merge-tools]
p4.priority = 100
p4.premerge = True
p4.executable = C:\Program Files\Perforce\p4merge.exe
p4.gui = True
p4.args = $base $local $other $output[/code]
You can change "p4" to anything, so long as you change all occurrences of p4 left of the = signs.
If p4merge.exe is in your path and if you use p4merge as your identifier, then you don't need the executable line:
[code][merge-tools]
p4merge.priority = 100
p4merge.premerge = True
p4merge.gui = True
p4merge.args = $base $local $other $output[/code]
MVC Html.ActionLink() fails weirdly with routeValues parameter in Asp.Net
It seems simple. In an MVC view page you have an @Html.ActionLink with parameters for action, controller & route values:
[html]@Html.ActionLink("Some text","Action","Controller", new {id=1})[/html]
but instead of rendering the text with a link to the action, it renders a link with some weird URL that isn't what you want at all.
If you use intellisense to look at the overloads for ActionLink, you'll see that the overload you've got is interpreting new {id=1} as html attributes not as route values. You need the overload with one more parameter, which can be null:
[html]@Html.ActionLink("Some text","Action","Controller", new {id=1}, null)[/html]
And then it works.
Lost SQL Server sa password ? How to start up and login in single user mode
The problem: Someone has lost the sa admin password for your MS Sql Server; or the one person who has SQL admin rights has left the company. Alas, you find that even having Windows admin rights does not grant you access because you have a recent version of Sql Server and you didn't grant Sql Server admin rights to the machine or domain admins.
You can still fix this. You will need local admin right on the machine, and the ability to:
- open a command line as an administrator
- look through the registry with RegEdit to find the settings for the version and instance of Sql Server you are locked out of. MSDN mssqlserverloginmode-registry-key has some clues.
- look through
Program Files\Microsoft SQL Server\and find thebinndirectory for your version and instance of Sql Server.
The trick is to start Sql Server in single user mode, and then login as a local admin. This will give you admin access to the SQl Server.
How to Get Admin Access to Sql Server on Your Machine
- Stop the sql service.
- This is most easily done via the Windows Services Gui, but
net stop MSSQLSERVERmight do it. If you have a named instance usenet stop MSSQL$instancename
- This is most easily done via the Windows Services Gui, but
- Work out the file location and registry key for the version/instance name of sql server you are trying to get into. This may be trickier than you think - you may have SqlExpress as well as more than one version and instance name of MSSQLServer. For instance:
C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\BinnandHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer\
or
C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\BinnandHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS
- Change the registry entry for loginmode to 2 (not 0 or 1), which enables both Windows and SQL authentication.
- Open a command line window as administrator and navigate to the
binndirectory you found earlier underC:\Program Files\Microsoft SQL Server\. Run sql from the command line using the–fparameter,sqlservr.exe -f- You may need more command line parameters to get your instance running properly, although I never have so far. If so, use the Windows Services Gui to see what the rest of your command line has to be.
- For a named instance, your command line is
sqlserver.exe -f -s instancename - An alternative to
-fis-m, but-fworked for me.
- Open another commandline, also as administrator, and run
sqlcmd –S <servername>.Sqlcmdis usually on the path, but if not it should be in the same directory assqlservr.exe.- The server name for local machine is of course '
.', as insqlcmd -S .
- The server name for local machine is of course '
- Now you can type T-SQL commands. Try
Select @@ServerName, @@Versionjust for fun. - Note that after typing your commands you must type
GOand enter before anything you've typed gets sent to the server. - Add yourself to the sysadmin role:[sql]EXEC sp_addsrvrolemember 'DomainName\LoginName', 'sysadmin'[/sql]
- Or, enable the sa login and set the password with 2 lines of T-Sql:
[sql]Alter login sa With Password= '<enterStrongPasswordHere>'
Alter login sa Enable
Go[/sql] - Exit and close both command windows.
- Restart the Sql Server service from the services Gui or with
net start MSSQLSERVERornet start MSSQL$instancename
Done.