Wednesday, December 31, 2014

How To Solve The Gradle DSL method not found: 'runProguard()' Error In Android Studio

After upgrading Android Studio, I ran into the following error -

Gradle DSL method not found: 'runProguard()'

This issue prevented the project from building. The solution was simple.
Do a search and replace.

Press Ctrl-F or Edit/Find and enter the letters runProguard into the search area.
Once you have found runProguard, you will see that it is listed in this procedure:

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

Change the area I have highlighted to the following:

    buildTypes {
        release {
      minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

That is it! That will solve the issue for you.
Wasn't that simple?
Here is a link to more information about why this is necessary.

http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
Enjoy!

Smooches!
Kila


Tuesday, December 2, 2014

Telerik's Just Decompile Offline Installer - Install JustDecompile Using Offline Installers

When .Net Reflector stopped being free, I think little birdies fell out of their nests all across the world. It was a great, free resource that was extremely useful at breaking apart a dll and allowing you to examine the guts. Although it was great, I was unwilling to shell out money for a paid version. I came across Telerik's JustDecompile, which, in my humble opinion, was better and free. That was many moons ago.

Fast forward to now and I have been using JustDecompile for years. However, I recently needed to install it on a "secure" system and found that the system's antivirus software was blocking the download. After dutiful searching to find an offline installer without the bootstrap stuff in Telerik's official JustDecompile download, I came across these links-

http://www.telerik.com/downloads/productfiles/bgctm/JustDecompile_2014.1.117.0.msi
http://www.telerik.com/account/your-products/product-versions.aspx?pmvid=3656&pid=845 

These links will allow you to download JustDecompile if you are behind a firewall, unable to download exe files (the top link) or are in a situation where your antivirus software is screaming bloody murder. If it doesn't work for you, let me know. As a matter of fact, if it DOES work for you, let me know. I just like to know things.....Smooches!

Please note - you WILL need to create a free Telerik account, but why shouldn't you? It is free after all! JustEnjoy (play on words intended)!

Kila Morton

Tuesday, April 15, 2014

SOLVING - Could not load file or assembly or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

This is quite possibly one of the most frustrating errors you can get after upgrading a Nuget package in an Asp.Net MVC project. If this is the first time you are getting it, you are likely wondering what is and where is the assembly's manifest. Well fear not mighty soldier developers because I have the information that will help you get running in no time. First an explanation.

When you update an existing Nuget package, that update often has side effects. What does that mean? Well the packages you need often depend on other packages and when you run the Nuget update, the package you need might pull in updates to the packages IT needs even though you didn't specify that you wanted those other packages updated. That was a  mouthful! The dependencies being updated are side effects that you may or may not have planned for. On the surface, this seems like it might be OK. As long as the update happens to the files you need and things still build, you are fine. However, this isn't always the case. I'm going to run through what happens when an update happens.

For this example, I'm going to say we are updating Package A.
  1. Package A depends on Packages K, L and M.
  2. You already have a version of Packages K, L and M installed on your machine.
  3. Package A needs to upgrade Packages K, L and M BEFORE it can install itself.
  4. Package M is needed by Package R so it can't be uninstalled unless Package R is uninstalled.
  5. The update  uninstalls Package R, Package M, Package L and Package K and then installs the newer versions of each package it relies on and the version of Package R that works with Package M. 
  6. After the new versions of the dependencies have all been installed, Package A installs the latest version of itself.
  7. The package.config file is updated to include the version information for the newly installed files.
  8. The dependentAssembly area in the web.config file is updated to include dependency information and establish the backward capability of the newly updated files.

That is a lot! It is no wonder then that subtle side effects (aka hidden problems) can arise during that process. It is involved! If everything runs smoothly, all of the references are updated accordingly and all is right with the world. However, nothing ever runs smoothly does it?

Sometimes, due to all of the installing and uninstalling that takes place, the web.config file does NOT get updated by the Nuget Package you are running! This is where we run into errors like -

Could not load file or assembly 'Whatever.File' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Basically what this error SHOULD say is, "The web.config and package.config files do not match what is in the References folder"! There you have it - I have just rewritten a Microsoft error into something that a developer can actually understand? Did hell freeze over? Anyway, THAT is the problem. Sometimes when these packages uninstall and reinstall dependent packages, they do NOT update the packages.cofig and web.config accordingly. If the web.config references a version of the package that no longer exists, you  are going to get the "Could not load file or assembly...blah...blah....blah" error! So how do we solve this issue? The solution is easy.

  1. First, identify the file that the system is complaining about. It should be easy to do since the error message will list the file. For example, in the error below, Microsoft.Owin.Security.OAuth is the culprit. Could not load file or assembly 'Microsoft.Owin.Security.OAuth' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  2. Second, go the References folder in your project and look for the file specified. When you find it, right click on it and select Properties (Alt-Enter) and look at the Version. Make a note of it. This is the actual version that is installed on your system.
  3. Third, go to the packages.config file and find the file. Check to see that the version number for the file listed in the packages.config matches the version you have specified in your References folder. 
  4. Fourth, check the web.config dependentassembly area for the file. The bindingDirect  areas has an oldVersion and newVersion area. The oldVersion area should end with a version number that is EQUAL to the version number you have installed and the newVersion number should MATCH what you have installed. For example, if you have version 5.0 of System.Web.Mvc, then your dependentAssembly and associated bindingRedirect should look like the following - 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
 

    </assemblyBinding>

 After you are done, clean and rebuild your project!
 Smile :-). Either your project built successfully and you can see your stuff or you have to repeat the steps above for another file until they have all been corrected.

Notice the highlighted areas. The newVersion is what is installed on your system. The oldVersion represents all of the versions the newVersion should be able to handle. If this web.config information is out of sync with the version information in your packages file and in your project, then you will get an error.

Please note - sometimes you have to manually change MORE than just one file to get things running. I have one project in which I had to update 5 references from different packages. Each situation will be different. If you get another file error, correct that one and keep going until you get a clean build and can run your project.

If you want, you can run the Nuget Package Manager and update the one package that is giving you an issue. However, sometimes that is not the best approach if that package  has dependent relationships. You can end up in what I call "Package DLL Hell" - where one package updates another package and each update keeps causing other side effects! Hey - wasn't this what we were supposed to be SAVED from using Nuget? LOL.....anywho....following the steps above will get you going!

Smooches,

Kila Morton







Friday, March 21, 2014

Solving System.InvalidCastException was unhandled by user code Message=[A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast ......

Recently, while upgrading an Asp.Net MVC 4 project someone created to an Asp.Net MVC 5 project, I ran across a great error. The error was this:

It was also bright and red!


Server Error in '/' Application.

[A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. Type B originates from 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\bc28c2e0\1b833c84\assembly\dl3\efd960b2\2bccde4f_7f44cf01\System.Web.WebPages.Razor.dll'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. Type B originates from 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\bc28c2e0\1b833c84\assembly\dl3\efd960b2\2bccde4f_7f44cf01\System.Web.WebPages.Razor.dll'.

This error made me VERY unhappy.
However, the solution was VERY simple.
I just needed to tell the application which version to use.
Here are the steps I took.


1. Open the web.config file.
2. Scroll until you find the <assemblybinding> tag under <runtime>.
3. Add in the following dependent assembly information for the dll that is causing you problems. In my case, it was as follows:

<dependentAssembly>

<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0"/>

</dependentAssembly>

4. Rebuild your project!

That is it! You should now see the fantastic work you have created after you build and Ctrl-F5. For all of you people out there still making projects with MVC 4 - JUST STOP! Back away slowly! MVC 5 is your friend!

Smooches,
Kila Morton

Wednesday, February 26, 2014

Solving "The term 'mongod' is not recognized as the name of a cmdlet, function, script file, or operable program.

Recently, while attempting to install an instance of MongoDB on a Windows Azure VM, I got a nice error.

mongod : The term 'mongod' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

I was in the bin directory of MongoDB at the command prompt and trying to run the database with the following statement -
mongod  --dbpath c:\MongoData\ --logpath C:\MongoLogs\mongolog.db

Ha! I forgot the .\!
mongod  --dbpath c:\MongoData\ --logpath C:\MongoLogs\mongolog.db

should have been
.\mongod  --dbpath c:\MongoData\ --logpath C:\MongoLogs\mongolog.db

I'm adding this here just in case anyone else is spacing out on a Wednesday wondering what in the world is going on when they are trying to run their Mongo databases.

Smooches,

Kila

Thursday, February 20, 2014

Solving System.Web.Http.GlobalConfiguration' does not contain a definition for 'Configure

When upgrading your fantastic Asp.Net Web Api projects to version 2.0, you might come across this wonderful error -

System.Web.Http.GlobalConfiguration' does not contain a definition for 'Configure 
on this line of code -
GlobalConfiguration.Configure(WebApiConfig.Register);

The solution is quick and simple.

1. Open the Package Manager Console for the project with the error.
2. Type in Install-Package Microsoft.AspNet.WebApi.WebHost and hit Enter
3. Rebuild your project and all should be right with the world (or at least right with your project)


Smooches,
Kila



Wednesday, January 8, 2014

How To Remove The "Switch between apps" window In Windows 8.1

Hi! I've just been using a Windows 8.1 machine and losing my mind. I vowed never to use it until it was better designed (usually around Microsoft's 3rd or 4th attempt) after the very first frustrating experience I had with Windows 8, but I had to backtrack on that to test a piece of software I'm working on. I have noticed that although Windows 8.1 is slightly different, Microsoft has decided to maintain the interface from hell. I don't know why Microsoft thinks that people want to invest time in learning a new operating system when they have things to do.

The new rub for me now with Windows 8.1 was the right side Switch between apps menu that didn't want to disappear. I moved my mouse all over that little thing to get it to leave. It wouldn't. I switched to a different app and it popped up on the left side. I was starting to get annoyed. I moved my mouse over it, pressed Esc and laughed as it sat there on the screen mocking me. Finally, I decided to probe it with my mouse. It won't go anywhere if you just put your mouse over it. You actually have to put your mouse into the far left corner (if it popped up on the left) or the far right corner (if it popped up on the right) for it to go away. That is the dumbest thing I have ever seen in my life! 

Microsoft is a company with many brilliant people. They come up with great things from time to time. Windows 8 and Windows 8.1 should NOT be included as one of those great things. A few months back, I was on the Microsoft campus to do some testing for a Visual Studio add-in. Basically, they put you in a room and have you test out a product while you provide feedback. How on EARTH, did Windows 8 make it through that process? I don't understand. The product is COMPLETELY counter-intuitive for an operating system. I don't want a phone experience on my laptop! When I sit down to work, I don't want to perform unnatural movements to get things done. Do you know how much effort it takes to move my arm to touch my screen versus moving my wrist SLIGHTLY with my mouse to move something on the screen? I don't want to swipe and figure it out. In fact, I don't even like fingers ON my screen! I'm not alone! I also hate trying to figure out what something does. I like words - Open, Close, etc. I am against the idea of prearranged desktop icons. When I add a program to my computer and it adds an icon, I feel connected to that program and it's placement on the desktop because I ADDED IT. When I open Windows 8 and all of this crap is already staring at me, it just FEELS wrong because I didn't add that crap. I REALLY don't like the colors and styling of the interface either. I think it looks immature and cluttered. It may sound silly, but the way you set your computer up is an extension of you. Microsoft made the bet that people wanted a phone like experience across all devices. They were wrong. I have Windows 7 on every machine I do real business with. I have Windows 8 for those times when I need to make sure something I've created works on it. However, I have NO intention of upgrading unless I am absolutely forced to do so. NO INTENTION! I couldn't even imagine a system like Windows 8, with that horrible Metro interface, being used in an enterprise environment where people have to get things done quickly. You just don't have time to figure out why the pages keep swapping over each other when you are trying to get real work done. Windows 8 has been out for some time now and it has a very small adoption rate. I actually know people who purchased a Windows 8 laptop and then installed Windows 7 on it! What does that tell you?

I would love it if Microsoft gave users a CHOICE - stick with the dumb as rocks Metro interface OR use the Classic Windows 7 interface! They would really get to see how many people thought Windows 7 was just fine. Windows 8 wasn't an improvement over a design that was broken. It just wasn't. If they had focused more on the cloud and integration with your other devices and LESS on radically altering the entire interface, Windows 8 would have been a smashing success. Instead, just like with the ribbon in Office that sent me and others right into the arms of Google Docs and Open Office, they focused on styling TOO MUCH! Who made that choice? I bet it wasn't a real developer. It seems like something a marketing person would have thought of. Either way, I think it is just plain crazy. History may show me to be totally wrong, but given the fact that Windows 7 usage is still mighty high, I don't think so.

Anywho, to remove that annoying Switch between apps menu, just put your mouse in the nearest corner! Why didn't Microsoft make a little close icon on the pop-up? Counter-intuitive Microsoft - simply counter-intuitive.
This ends my rant for the day.

Smooches,
Kila

***********************************************************

Problem:
The "Switch between apps" pop up in Windows 8.1 will not go away.

Solution:
Put your mouse into the corner of the pop up and it will disappear. If the pop up is in the far right corner, put your mouse into the top right corner of the pop up and it should disappear. If the pop up is in the far left, put your mouse into the top left corner and it should disappear. After you finish getting rid of that, go get a breath of fresh air.