Could not load file or assembly 'Microsoft.Owin, Version=2.0.2.0 - owin

The searches I've run on this site and the internet in general address loading issues as an application issue. I have an assembly, System.Web.Http.Owin that, using IL Spy, I determined has a dependency on Microsoft.Owin 2.0.2.0, while the (latest stable) version of Microsoft.Owin pulled from NuGet is 3.1.0.0. All of the other assemblies referencing Microsoft.Owin are referencing v3.1.
I understand that System.Web.Http.Owin is pulled in as part of the Microsoft.AspNet.WebApi package and the latest stable version of that is 5.2.3. How can I get it to reference the current version of Microsoft.Owin?

The solution to my issue turned out to be simple: add an entry in app.config for the Microsoft.Owin dependent assembly
The compiler then loaded the package.

Related

HttpRequestMessageExtensions not being found at run-time in Azure Function

I've got an Azure Function app that creates a precompiled DLL (so it uses normal .cs files, not the older .csx method, pre-VS2017). Previously, it was targeting .Net Framework 4.5.2. I updated it to 4.7 so as to use some of the new C# 7 features. I updated my NuGet packages by doing "Update-Package -Reinstall" and verified that they all have the "net47" target set in my packages.config file.
Everything compiles fine. But when I call a function that uses either of 2 HttpRequestMessageExtensions methods, I get an exception. One example of the exception is this:
Method not found: 'System.Net.Http.HttpResponseMessage
System.Net.Http.HttpRequestMessageExtensions.CreateResponse(
System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode)'.
Here's an example of a tiny test function that will cause the error:
using System.Net;
using System.Net.Http;
public static HttpResponseMessage Run(HttpRequestMessage req)
{
return req.CreateResponse(HttpStatusCode.Accepted, "");
}
Upon calling this function with say Postman, I'll receive the aforementioned exception. I also get a similar method not found exception when I call GetQueryNameValuePairs() on the HttpRequestMessage.
I've tried updating my NuGet packages to the latest, no difference. I've cleaned and rebuilt and restarted a bunch of times, making sure to nuke my bin and obj directories.
I'm not sure what could be the problem. I guess I could downgrade back to .Net 4.5.2 but I'd rather not. For one, I want to use C# 7, and for two, I want to understand what the problem is rather than avoid it.
Update: interesting. The issue seems to be with System.Net.Http. If I lower it to 4.0.0 everything works fine. If I raise it to any higher version I get the issues listed above. I tried selectively lowering each of my packages, one by one, to their previous version number to find this out. I then updated all but this one to the latest version and it fixed the issue.
I also tested it on my side. The issue is related to the latest version of System.Net.Http assembly(4.3.2). If I don't install this package manually or install the earlier versions(4.3.1/4.3.0), the application could work fine.
The CreateResponse method is a extension method which is written in System.Web.Http assembly(version 5.2.3). It seem that it is not compatible with the latest version of System.Net.Http. Please could just skip the error by using the earlier version of System.Net.Http and you can also submit this issue to Microsoft using follow channel.
https://connect.microsoft.com/VisualStudio/Feedback
Interesting. For me, if I got above version 4.0.0 (including 4.1.1 or 4.3.1) I still get the same problem of not finding those extension methods.
The assembly might not be updated during you change the package version. From the bin\Debug\net47 folder, we could check the current assembly version we used.
If the modified date of assembly is 2/9/2017, the package version is 4.3.1. If the modified date of assembly is 4/19/2017, the package version is 4.3.2. If the assembly is not the latest version, it could work fine on my side.
In addition, Microsoft.Asp.Net.WebApi.Client package is installed by default when creating an Azure function. System.Net.Http is one of its dependencies. So we don't need to install the System.Net.Http package manually. When running our application, NuGet will choose a right version of System.Net.Http for our application.
I had the same issue running my Azure Function locally and eventually tracked it down to conflicting System.Net.Http assemblies. I created my Azure function from a blank ASP.NET Web App and initially pulled down the System.Net.Http NuGet package to use within the project. I also pulled down the Microsoft.AspNet.WebApi.Client for use within the project. It did not matter which version of System.Net.Http I tried my project would compile but fail when the request was made.
Eventually, I removed packages I had downloaded, cleaned the build folder and added just the Microsoft.AspNet.WebApi.Client. I noticed that this automatically referenced the System.Net.Http on my machine for my version of the .NET Framework. (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework). This compiled successfully and I was able to make requests to the function without any exceptions.
Using #Aaron-Newton's insight, I identified that my issue was due to my Azure Functions project referencing a .Net Standard 2.0 class library. I switched it to .Net Framework 4.6 and it started working again. Seems like this is a bug in the Functions tooling.
I've filed a bug with the Functions team here: https://github.com/Azure/Azure-Functions/issues/477
I had the same issue. I spent quite a while to fix this problem.
The cause is that the Azure Functions project is refering to .Net Standard Library with version higher than 1.4.
Bringing down your .Net Standard version to 1.4 or lower would fix the problem.
But this is defintely a bug with Azure Functions SDK. They should fix it.
https://github.com/Azure/azure-webjobs-sdk-script/issues/980
https://github.com/Azure/Azure-Functions/issues/477

Microsoft.Azure.Mobile.Client package updated, and now System.Net.Http doesn't exist

I just updated the Microsoft.Azure.Mobile.Client package in my Xamarin project and now the System.Net.Http namespace doesn't exist anymore. Here's the error message. I was using the MobileServiceClient object to pass through the URL for my Azure backend. What should I do now? I don't want to go back to the previous version if I don't have to.
The error message is pretty explicit. Do you have a System.Net.Http reference in your app? If not, add one.
What is likely to have happened is that the dependency that the package has is for a version of System.Net.Http that is not compatible with your target .net version and the upgrade has removed the old version and not been able to add the new version.
You will need to find the version of System.Net.Http which is a dependency of Microsoft.Azure.Mobile.Client and find out what version of .Net it targets (the folder is likely to be underneath your packages folder even if the reference is missing).
Then you can decide whether you can target your project at a newer version of .Net or whether you need to downgrade Microsoft.Azure.Mobile.Client.

Cannot add Microsoft.Azure.Devices to ASP.NET 5 project: can't find fx/System.Net.Http.Formatting

When adding the Microsoft.Azure.Devices NuGet package (I've tried 1.0.0, 1.0.2, and 1.0.4) to an ASP.NET 5 (Web API 2) project, the reference to System.Net.Http.Formatting is marked as not resolvable with
NU1001 The dependency fx/System.Net.Http.Formatting could not be resolved
There are several NU1001 issues out there, but none whose causes seem to map to this one. The best reference is this one on Github, but the resolution details were sketchy.
The reference DLL is indeed marked as Copy Local when the package is brought into a 'legacy' assembly package, so I can see why it might not find it, but can't determine the right way to fix it.
In my actual use-case, Microsoft.Azure.Devices is being referenced by a .NET assembly package and THAT is then included as a project reference in the ASP.NET 5 project, and indeed that gives the same error as trying to directly reference the NuGet from the ASP.NET 5 project.
We're using dnx452 as the only framework referenced in the project.json file.
I tried this with version 1.0.5 and it installed successfully for me.

Get PDB information for latest ServiceStack release

Currently working on ServiceStack v.4.0.17 I am trying to get the ServiceStack.pdb file from NuGet package.
I tried to get it from Symbol source website but the latest version available is 3.9.70
I downloaded the NuGet package from https://www.myget.org/F/servicestack/ to be able to get the very last ServiceStack version.
Attached a screenshot with symbol link paths:
I haven't tried it myself, but the wiki on the github lists several sources for pdb files:
Source Symbols
The third link is at MyGet: MyGet PDBs
Since you're pulling the packages from MyGet, you should probably look there for PDBs too. ServiceStack 3.x is in maintenance mode and won't be upgraded (except for bugfixes) so for now it seems the new versions are only posted to MyGet and not at all to NuGet.

Why isn't ServiceStack.Text being copied to Bin?

I have added ServiceStack.Redis via Nuget to an assembly that I have. That package has a dependency on ServiceStack.Common which has a dependency on ServiceStack.Text
this project is referenced from my web project, but when I build the Website and load it in a browser I get the error
Could not load file or assembly 'ServiceStack.Text, Version=3.9.24.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Sure enough, when I go to the Bin directory of my website it isn't there. Oddly enough, if I go to the Bin directory of the class library I am referencing (the one I pulled the Nuget package into) it IS there.
To recap
ClassLibrary
ServiceStack.Redis via Nuget (includes ServiceStack.Common and ServiceStack.Text)
All of these make it in the Bin dir upon build
Web Proj
Refs ClassLibrary
all dependencies are moved to Bin except ServiceStack.Text
I'm stumped. Does anyone know why?
Note: The error appears to be looking for version 3.9.24, but the version Nuget pulled is 3.9.26. If I move it to the Web/Bin manually it works though
Check the assembly reference properties in your .csproj files, perhaps they are still referencing the older version of ServiceStack.Text. Sometimes I find that NuGet will fail at some point during a package update and leave your assembly references in a bad state. For example, your packages.config file may correctly show that all ServiceStack references are at the same version number, but your .csproj file may be referencing 3.9.24 for ServiceStack.Common and 3.9.26 for ServiceStack.Text. Thus, it will copy different versions of these assemblies to your bin directory. It likely can still build successfully because you have the older copy of ServiceStack.Common cached in your NuGet packages directories.
I fix this by either manually editing the .csproj file to have the correct assembly path and version number, or by uninstalling and reinstalling the affected packages via NuGet (this would likely require reinstalling most/all of the ServiceStack packages since ServiceStack.Text is such a low level dependency.
I had this somewhat bizarre problem in several versions of Visual Studio, atm 2013. It has occurred at random.
I too have dependencies on ServiceStack.Common, which implicitly depends on ServiceStack.Text. However, I am not directly at any place referencing any class, struct or the like inside ServiceStack.Text binary.
Even having set
Copy Local = true
ServiceStack.Text.dll is not being copied to the output folder.
I have experienced this with numerous versions of ServiceStack dll's, currently v4.0.15. This could be a more general Visual Studio bug concerning dependency-chains with dead ends in not directly used libraries? Probably ServiceStack.Text is marked as a dependency in other ServiceStack dll's, but Visual Studio tries to outsmart this by seeing, the library can be excluded (I'm just speculating).
Anyway, I solved it by simply using ServiceStack.Text directly in a private method put in a random used file in my own library:
/// <summary>
/// Needed because of Visual Studio bug? Don't use this method.
/// </summary>
private JsonValue DontDoIt()
{
return new ServiceStack.Text.JsonValue();
}
I would expect the compiler to exlude an unused private method - indeed maybe it does in the IL code, but none the less this makes VS copy the dll to the output directory.
As esker says there may be some problems with Nuget when updating but there are also some problems with ServiceStack Nuget packages.
The latest package working as of today is 3.9.60. ServiceStack.Text.dll is really 3.9.60.
ServiceStack 3.9.61 and above has ServiceStack.Text.dll version 3.9.59.
The copy problem is appearing again.

Resources