I'm using the asp mvc template with dotnet core 6 preview 3.
Since I update to preview 3 (from preview 2) views are no longer published when I publish the site. Not better with preview4. Even from a fresh template Views are not published.
The directories Views and Areas are not even present in the publication.
There is no views.dll generated, and when I upload the publication to a sever I get a blank page when connecting to the site. In event viewer there is an error saying that index.cshtml can't be located.
I just can't imagine where to look for. Right now I copy and paste the Areas and Views directories to the server. I'm sure there is better to do.
----- EDIT 1
To restore my project behavior I had to add the following lines to my csproj:
<PreserveCompilationContext>true</PreserveCompilationContext>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
<CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
Related
Is it possible to generate a DLL only from the *.cs files of the project and then remove them and deliver the DLL + rest of the files including the .cshtml files (views) for the client to have autonomy to edit the front? What kind of changes would I need to make to the project, would I need to keep 1 separate full version to be able to generate this DLL and a second project where I would have the DLL + views .cshtml? Do I need to reference this DLL somewhere? Would it be in the *.csproj file?
I recently decided to study ASP.NET Core 6 and ended up creating a very simple system that has several functions such as login, logout, user registration, customer registration, company registration, product registration, all of this is working perfectly, I used the scaffold of aspnet code generator + Entity Framework to generate Create, Delete, Details, Edit, Index and Migrations pages from Models (code first), I tested it with Sqlite initially and then with SqlServer, the system is OK, I can compile it in debug and release/publish, I can put it in production and send it to the client and it runs there without problems, this would be the default scenario where I would sell the solution without it having access to any source code (I won't go into details like reverse engineering , security, protection, etc..., as it is not the purpose of this question), what I need is for me to be able to edit the project for him so that he can edit only the *.cshtml files by modifying the i information from the front as I see fit and generate a new executable for the project, when he needs changes to the backend I would do it for him and charge for upgrades or not charge depending on the type of change.
It sounds like you are looking to deploy your application with Razor Runtime Compilation Enabled.
If you enable this, the .cshtml files that are deployed would be compiled at runtime, meaning that you could manipulate them on the fly without a visual studio recompile.
This is not enabled by default, so you will need to do a few things. First you will need to install the NuGet package for this
Install-Package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
Then you will need to add a call to AddRazorRuntimeCompilation() in your builder when you add either MVC or Razor Pages to your project.
For Razor Pages it would be similar to the following
builder.Services.AddRazorPages()
.AddRazorRuntimeCompilation();
You cannot do this if you are using Blazor
I am working for a personal project (Creating a website). I finished the design, then i converted all the pages to static html/css pages, after that i added some javascript. now I am with the final stage making the site dynamic i mean integrating the html/css pages to be an Asp.net MVC project with c# code that generates the content. even if i can tinker, but i prefer to be more methodical. so i am asking you for any guidelines how to do it ? and what the things i need to keep in mind to make this conversion ?
I am going to document my experience doing this here. It's going to be a incomplete and / or incorrect answer until I'm done with the process in a few days. I'm assuming Visual Studio 2012.
Create a new MVC 4 Internet Application project.
Add a method to the home controller for each static page.
Right click on each method and select Add View.
Open the images folder in VS and delete every item (from inside VS)
Drag all static site images into images project folder and add to project.
Replace contents of Site.css with static site css.
Paste the html from each page into the corresponding view. Leave the ViewBag.Title code block alone.
(still incomplete)
I'm brand new to MVC and I was trying to work my way through the music store tutorial:
http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-3
I could tell right away that things looked slightly different in MVC 4 RC but one big thing I'm hitting is I don't see any Shared View being created when I add a Home View. In fact I don't see a _Layout* file anywhere within the project.
So my question is, has the shared view thing been replaced by some other mechanism or do I need to do something else to add this explicitly?
Thanks,
JT
From http://blogs.msdn.com/b/jasonz/archive/2012/05/31/announcing-the-release-candidate-rc-of-visual-studio-2012-and-net-framework-4-5.aspx:
If you’re doing web development, you’ll notice a handful of updates in
the RC. First off, we’ve updated some of the project templates. We
made the MVC4 Empty template truly empty, and renamed the original
empty template to now be called the “Basic” template. We also improved
the performance of the New Project creation time.
Essentially all of the initial templates have been cut down a lot. The Empty project doesn't come with a HomeController either - you can add anything you need back.
Apparently this is tied to how you start the project. If you select Internet Application when you create a new MVC project it will build these files for you but if you select Empty you have to create them manually.
I have an MVC 3 app that has some core functionality (most important is autorisation) but mainly serves as a portal to different areas or modules. I want to organize thit to different modules that with minor changes also can be deployed as their own website.
The project consists of a Forum, Blog engine, Messaging between users + 4-5 upcoming modules.
I looked at ScottGu's blog about MVC 2 and found something that seemed perfect:
Depending og what the customer need I want to only give them the exact modules they can use. It is also easier from a maintainence view to be able to work and update referencd assemblies in each project and just do a full update for the customers that have that spesific module on their server.
But in MVC 3 there is no apparent way to use Areas this way, do you know how?
Status
I will try to add MVCContrib Portable areas to my existing solution and convert my areas ower and will post back the results. If it works I will mark it as the accepted solution.
MVCContrib has portable areas.
http://mvccontrib.codeplex.com/wikipage?title=Creating%20a%20Portable%20Area&referringTitle=Documentation
This is possible in MVC3:
From:
http://bob.archer.net/content/aspnet-mvc3-areas-separate-projects
Right click on the shell project and "Add Area...". Type in the area name. This will create an Areas folder with your area in it. (This is not 100% needed but you do need the "Areas" folder and you can steal the XXXXAreaRegistration class for your application.)
Create a new MVC3 empty project in your solution to match your area. Move the XXXXAreaRegistration.cs file from the shell mvc project to the new project and adjust the namespace as applicable. (Or you can manually create an area registration class, it's a pretty simple class. Just use the Add area template generated one as an example.)
Edit the routes in the AreaRegistration folder as needed.
Delete the folder under the areas folder that the template wizard added.
Modify the web.config of the new project and take out the connection strings and the authentication, membership, profile, rolemanger sections. You will not need to deploy this web.config but the razor intellisense doesn't work without it during dev time.
Delete the global.asax file from the area's project or you will get extra default routes.
Create a virtual directory in the "Areas" folder of the shell project with the name of your area as the alias and point it to your "area" project. You will need to use IIS or IIS Express for this. I use IIS. For IIS Express you can use the appcmd.exe in the IIS Express folder or you can edit the applciationhost.config file.
Building or publishing my ASP.MVC 2 application the .spark files in the View directories copied to /bin/Views/*.
This redundancy seems to be useless as the app runs fine on the server even if I delete the bin/Views directory.
Any idea how to prevent this behavior?
My files are tagged with the default build action "Content" and the View directories are Namespace providers as in the default MVC template.
Set views as content.
In order to do that - in solution explorer, click on view (or select multiple of them) and hit F4.
In properties, check Copy to Output prop. It should be false.