Can't get the project in solution reference class in another project - asp.net-mvc-5

I am new to MVC and not sure what I am doing wrong.
I have a solution with two projects in it. One is a C# library class project and the other is an ASP.NET MVC project.
The class library project is for holding a class used by the MVC project.
But I can't get the MVC Project to "see" the class project.
I have added a reference to the class library project in the MVC project, but when I try using MVC.Class in the MVC code file I can't access the files in the class project -- it is gray out and doesn't see the class project.
Can someone please tell me what I am doing wrong. Thanks for the help.

Related

Updating Project References in VS 2019 Community edition

I have a WebApp and several APIs with each one having a project dependency on a class library project. I have changed the folder structure and moved around some of the class (.cs files) within the new folder structure of the class Library project. For example, I created a new Data folder and moved some of the .cs files from the Models folder to the Data folder.
However, whatever I do I cannot update the WebApp and API projects to take account of the new class library structure. I have tried Rebuilding the whole solution, unloading and reloading the class library project etc., but the WebApp and API projects are still bound to the old class library structure and do not recognise the existence of the new Data folder.
Any ideas on how to update the class library reference in teh WebApp and API projects to reflect the changes made?

Service stack from a web application

I was looking at integrating a class library that uses service stack with an existing web application. I added the class library and its reference dlls in the bin folder for the web application and entries in the web.config file for dependency injection but I am getting an error as below. Please let me know the best way to approach this issue.
error: ServiceStack: AppHost does not exist or has not been initialized. Make sure you have created an AppHost and started it with 'new AppHost().Init();' in your Global.asax Application_Start() or alternative Application StartUp
Go through Creating your first web service from scratch to walk through how to add ServiceStack to an empty ASP.NET Web Application.
AppHost is your own class that you create that inherits AppHostBase.
You should get the .dlls from the ServiceStack NuGet package, but otherwise you never want to put dlls in /bin folder yourself, if you instead want to reference a copy of the ServiceStack dlls they should be in an external folder like /lib, when VS.NET builds your project it will automatically copy it to the /bin folder.
I would still recommend using the NuGet packages, but if you want to reference .dlls have a look at the Chat demo which references copy of ServiceStack dlls in custom /lib folder, it also has the minimal libs required for a ServiceStack + Razor ASP.NET Web Application.
Did you try to do what the error description suggested? Go into global.asax.cs, and add:
new AppHost().Init();
into the Application_Start() method.

MVC Ninject: How to add NinJect bindings from an MVC Area project

I've been using this blog example:
http://blog.longle.net/2012/03/29/building-a-composite-mvc3-application-with-pluggable-areas/
I have the concepts working in my solution. However, I'm trying to figure out a good way only add bindings to the kernel if a user has permissions to access a module/area.
I've read up some on the ServiceLocator but I was trying to stay away from it.
One thing I'm trying just to get things to work is user Contructor injection in the default constructor for a module. It's working but is a hack.
The pattern I'm using, each module project you create an class that inherits from AreaRegistion. When each module project builds, relevant files are copied to the Areas folder of the main web project. Then when the main project loads, reflection is used to load all module assemblies. Then when AreaRegistration.RegisterAllAreas() is called, it detects and loads all the modules with a class that inherits AreaRegistration.
I'd like to figure out an good way to access the Ninject kernel and add bindings in the module class that inherits from AreaRegistration. I would imagine initiating code to add bindings from the RegisterArea() override.
I'm looking for any suggestions on how to do this without resorting to the ServiceLocator.
Any ideas would be greatly appreciated.
For now I've found a better solution and that's to use NinjectModule. In the Plugin class, I'm going to create a class which inherits from NinjectModule. Then setup the pluging bindings in the Load overload.
Then use Kernel.Load in my main app bootstrapper to initialize the Load overloads in all plugin classes which inherit from NinjectModule.

Entity Framework 6 Code First Migrations using Identity user models in a separate project

Is it possible using EF6 Code First and MVC5 to put all the models, views, and controllers that involve ASP.Identity into its own class library project. So that over multiple web applications you could use that same DLL and already have all the views / controllers / models and be using the same security database for multiple applications?
We have several web applications with separate databases and one security database that handles all of them, and we weren't sure how to keep this model now that we're moving to EF6 Code First and MVC5.
If it is possible could someone point me to a tutorial of something similar or give me a basic outline of steps to go through?
Or if there is a better way to achieve my goal, of having one set of code to handle ASP.NET-Identity security that I can plug that dll into multiple web applications and get the same logic and databases?
Or is this not a good idea in general?
Very open to suggestion and advice. I appreciate it.
Yes it is. We do this with every project that we have. The structure is very simple. Just create a class library project to your solution, add EF to the project, then reference the class library from your main project.
If using Code First Migrations be sure to select the class library project as the default project in the Package Manager console when running migrations or adding migrations.
Here is a pseudo solution structure for your solution
MySolution
- MyWebApp
reference: MyDAL
-MyDAL
reference: EF6
The advantage that I find to this is that you can then reference the "DAL" class library from say a companion console application or windows form application, or a companion website, even in a different solution, and they will use the same code base.
For example:
MySolution
- MyWebApp
reference: MyDAL
- MyDAL
reference: EF6
- MyOtherWebApp
reference: MyDAL
NOTE: Your data context will look for its connection string in the Web.config or App.config in the startup project. NOT the class library. This can be confusing at first... But once you think about how .NET compiles the application together into the final package, it makes sense.
If you're talking about creating one class library for an entire data layer shared between multiple projects, then that's easy enough. You can move all your models, your context, etc. into a class library and run migrations using the class library project. The other projects will just reference that class library and not have migrations of their own.
However, if you're talking about multiple databases and associated data layers, where project Foo has its own models, context and migrations and project Bar has its own models, context and migrations, while the class library has just the IdentityUser and IdentityDbContext, things get a little more complicated. You won't be able to combine any of these contexts. So in your Foo project you'd have to instantiate your context for Foo and your Identity context if you need to work with both. It's not a problem, per se, but it's something to be aware of.

Why would the RIAServices.EntityFramework NuGet Package break context class code generation?

I have an existing project using RIAServices with Entity Framework. The project builds correctly and generates the AmsiWeb.g.cs file with all the context classes for my services.
I am converting my designer based entities and ObjectContext with Code First entities and DbContext. I installed the RIAServices.EntityFramework NuGet package to the web application that contains my services. However, now when I build the AmsiWeb.g.cs file only contains the WebContext class. It doesn't contain any generated services.
I have only at this point converted a single EDMX model to Code First and DbContext and made the requisite changes to the services that use that model to inherit from DbDomainService.
I am using EF 5.0... not sure if that matters cause I'm not sure how adding a DLL to the AmsiWeb application project would break code generation.
What would cause this to no longer work and how can I fix it?
Maybe it's a problem within the msbuild task that generates the proxy code (I mean the *.g.cs file). Probably it's looking for the wrong version of a entity framework. Have a look at this blog post http://mcasamento.blogspot.it/2012/10/entity-framework-5-code-first-and-wcf.html in the final part I wrote an assembly redirect statement that did the trick
It turns out that their needs to be a redirect for Entity Framework 5.0 (4.4.0.0 since I was using .Net 4.0) in the web.config. But, since my RIA Services were in a web application project that was not my root project the code wasn't generating.
Once I added the redirect to the web.config of the web application with the RIA services in it, the context code was correctly generated.

Resources