Add additional appsettings.Environment.json under the appsettings.json file [duplicate] - c#

I want to move one code file under the group of another, related file, like here:
As you see, SingleObjectViewModel.Commands.cs is hidden in SingleObjectViewModel.cs group. It can be useful in some cases.
I've created SingleDocumentViewModel.Commands.cs but simple drag-n-drop in Visual Studio do not work.
How to achieve it?

I found one way of doing this, but it is not user-friendly and needs to edit project file by hands. I'm not sure it will work in other versions of Visual Studio then mine (MS Visual Studio 2013)
First, unload project (right-click on project, Unload Project).
Then edit csproj file (right-click again, Edit *.csproj)
In editor, replace:
<Compile Include="SingleDocumentViewModel.Commands.cs">
with
<Compile Include="SingleDocumentViewModel.Commands.cs">
<DependentUpon>SingleDocumentViewModel.cs</DependentUpon>
</Compile>
Then save edited file and load project again (right-click on it, Reload project).
Now files are grouped:

Related

Visual Studio - Web Project - add existing area folder

We have a big Web Project with Many areas. One area is not included into the project, but its folder exists on the disk (and I also added it to Source Control).
I cannot figure out how to add that Area into the project. There seems to be no option for this. I am using Visual Studio 2017.
Above the solution tree is a button to show all files in the folder.
When you click it, your folder will appear in the solution.
On this folder click right "Add to solution".
Now your folder is part of the solution and you can hide the unnecessary items.
You may need to manually edit the csproj file. In windows explorer navigate to your directory and right click to edit the csproj (something like notepad++ works really well). Then locate the ItemGroup section that contains all the elements. Add a new one with your Folder\controller.cs. Save the changes. You'll need to reload the project in VS (if you have it open) to see the changes.
<ItemGroup>
<!--Other compile includes-->
<Compile Include="MissingArea\XController.cs"/>
</ItemGroup>

Missing design file

I was trying to save my project, but by mistake I save it on desktop and have only .cs file and Designer.cs. Is there any solution to restore [design] file and my whole project?
designer.cs is in fact the file you are looking for.
The problem is due to manually adding it as part of a project. Creating the form from Visual Studio actually does some extra tricks with the project file.
What you want to do is open your csproj in a text editor and correct it like so.
<Compile Include="stats.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="stats.Designer.cs">
<DependentUpon>stats.cs</DependentUpon>
</Compile>
That should do it. Notice the SubType actually specifies that it is a Form. This is what Visual Studio looks at to figure out what kind of designer or view to display. DependentUpon is what allows files to nest underneath each other.
If this doesn't work for some reason, you can also create a new form and copy the contents of the designer.cs class into your new one and all of your controls should show back up. This can also help you fix your resx file. It's probably best to go this route at some point anyway so you can better understand how a csproj file is structured in general. There's a good chance, this won't be the only time you need to look at the XML.

How to programmatically update project references in a Visual Studio project

I have a file structure like the following:
- binaries
- binary1.dll
- dev
- <developer-name>
- a.csproj
-trunk
- a.csproj
Developers who need to work on a.csproj will create a branch in dev and they will work from there. Our projects need to have a reference to binary1.dll in the binaries directory.
If the reference is a relative path (the Visual Studio default) then the path will not work both for the project in trunk and the project in the developer's branch.
To work around this problem I thought of creating an environment variable and using that in the project file instead:
<Reference Include="binary1">
<HintPath>$(MY_ENV_VAR)\binary1.dll</HintPath>
</Reference>
This works perfectly, but I wanted to help developers add references more easily, so I wrote a program that will convert relative paths that point to binary1.dll (for example, from the dev branch a.csproj it would change the path ../../binaries/binary1.dll to $(MY_ENV_VAR)\binary1.dll) but I have not figured out how to get that to work.
If I use a pre-build event, the project is already loaded into memory and the event return an error because it cannot write the project file.
Then I realized that I could override MSBuild targets, and attempted with the targets: BeforeCompiler, AfterCompiler, BeforeBuild, AfterBuild and in all of them the project is already locked.
Then I ran into this answer and I modified my code to call the executable in the GenerateApplicationManifest target, but that one doesn't seem to call the executable at all.
Some other ideas that I have been playing with are creating a new project that does the updating of the second project and have a link between them, but that would duplicate the number of projects.
I could also just change the depth of trunk, but that only hides the problem and doesn't really solve it. When developers create a branch inside their dev branch to work on different features or bugs then I have the same problem all over again.
There might also be another feature which fixes this in a more elegant way, but I haven't been able to find anything.
So my question: How do I get MS Build or pre-build events to modify a CS project?
I found a way to do this. The issue was that the Visual Studio process itself was locking the project, but Visual Studio could overwrite the file. I ended up modifying a.csproj to include:
<Target Name="BeforeBuild">
<Exec Command="UpdateReferences.exe" /> <!-- This creates the $(ProjectPath).new file -->
<Move SourceFiles="$(ProjectPath).new" DestinationFiles="$(ProjectPath)" />
</Target>

How do you add an existing form to a new project?

I have never been able to successfully add a Form from an existing file to a new project.
I read on a blog that you add just the *.cs file and the dependencies come in. Well, I tried this and the file did dragin and associate the *.designer and *.resx files. But, the Form icon does not display. Instead, the file looks like a normal *.cs file image. And, when I double click the file I get the code behind instead of the form object.
Is it possible to add existing Forms and get them properly recognized?
Here's an approach that doesn't involve closing the project and reopening it:
Add the 3 existing form files (cs, Designer.cs and resx).
Now, exclude the 3 files you just added from the project.
Open the Add existing item explorer window and go to your project directory.
Select the cs file and Add.
Tada. all good
After some more research I discovered the source of the issue. It is correct that all one has to import is the *.cs file. The caveat lies in the project type. If working in a Class Library project, another step must be performed.
Add a reference to System.Windows.Forms.dll and System.Drawing.
Import the *.cs file
Notes:
A. The files are only properly recognized after I performed these steps and then tried to open the file. Suddenly VS "wakes up" and fixes the files.
B. Order of the steps does not matter. If you already imported *.cs files, just fix the references.
C. If one is missing other references e.g. DevExpress or other 3rd party control imports), the *.cs files will not display properly until this has been resolved.
Sorry P.Brian.Mackey, your solution didn't work for me. It did improve it by getting VS to recognise that it was a form rather than a code file, i.e. gave it is Icon (imagine it added Form)
But only way I managed to fix the issue fully was to edit the csproj file manually in a text editor. I'm not really convinced that this is a great solution and is potentially quite dangerous, especially given I made two typing mistakes and completely broke the project but it did work once I got it right. It’s also hard to find the mistakes like not closing the tags properly or forgetting a file extention.
So the project started out with these entries after adding the files via 'Add --> Existing Item' :(P.s. I'm certain you don't have to copy the files into the project folders first, just navigate to where they are stored outside the project and VS will copy them to the folder which you right clicked on. Copy in advance of course works too.)
<Compile Include="Reports\GBudget1Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs" />
<Compile Include="Reports\GBudget2Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs" />
<Compile Include="Reports\LASHForm.cs">
<SubType>Form</SubType>
</Compile>
and further down in the file:
<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />
Comparing these with the existing forms in the project which were working correctly (other option is if you haven't got one, is to create a new form in Visual Studio and it'll give you the correct mark-up to copy) I discovered that the DependentUpon tag isn't associating the sub files to the main form code file.
So I edited it by hand to match:
<Compile Include="Reports\GBudget1Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</Compile>
<Compile Include="Reports\GBudget2Report.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</Compile>
Again further down the file:
<EmbeddedResource Include="Reports\GBudget1Report.resx">
<DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
<DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>
It's not a solution I like, but it works. If anyone has any better solutions, I'm happy to listen.
You can import an existing Form into a project. The files that need to be imported depend on the version of the Visual Studio used to create the form.
I will assume that you have two separate projects, Foo and Bar, in different solutions:
C:\
Projects\
Foo\
Foo.sln
Foo.vcproj
Program.cs
Foo.cs
Foo.Designer.cs
Foo.Designer.resx
and
C:\
Projects\
Bar\
Bar.sln
Bar.vcproj
Program.cs
Bar.cs
Bar.Designer.cs
Bar.Designer.resx
Now, say that you need to import fhe form Foo to the project Bar. First, you need to copy all files that accompany Foo into the Bar project folder:
C:\
Projects\
Bar\
Bar.sln
Bar.vcproj
Program.cs
Bar.cs
Bar.Designer.cs
Bar.Designer.resx
Foo.cs
Foo.Designer.cs
Foo.Designer.resx
Then, open Bar.sln in Visual Studio and right-click on the Bar project in Solution Explorer. Select [Add existing item] and select all files that you copied for the Foo form in the dialog opened. After confirming, you should see the newly imported form correctly in Solution Explorer.
I've just encountered similar issues when upgrading VisualBasic forms, going from VisualStudio 2010 to VisualStudio 2013. There appear to be two ways to add existing items.
Problem: If I choose Main Window->Project->Add Existing Item and pull in only the file formname.vb, the result appears to be interpreted as code only (no designer), points to the original file (rather than taking a copy to the new project) and has other issues.
Solution: If instead, I go to the Solution Explorer window, click to select the project (as opposed to the lower level objects in the tree) and then right click in the window, the resulting menu offers Add->Existing Item. Using this version works as expected, requiring only that I locate the formname.vb file. No manually copying files, no pointing to mulitple files, no editing scripts, etc. I'd guess the same applies for forms written in C.
You need actually 2 files:
- Form1.cs
- Form1.Designer.cs
Copy - paste them to your new project (just make sure there is no such form with the same nameexisting in new project)
Go to solution explorer and right click on it then add existing item, here select the existing form path. Now, and this is important, on the page where you want to use existing form, you must add header file:
using "your existing project name";
If you want to create a library of windows forms it is better if you create a Windows Forms Application project. Then delete the default form (Form1), go to the project properties and change the Output Type (or project type) from Windows Forms Application to Class Library.
This way the output will be a DLL but it will have the references you need for a windows forms project. As you pointed out, when adding existing items do NOT add their corresponding .Designer and .resx files, just add their top level/main file.
Maybe it is because of using visual studio 2012, but all these solutions didn't work.
AtConway gave a hint to edit the csproj file. And that hint worked.
Open the solution with the project that you want to add your three files.
Let's assume you want to add MyForm.cs / MyForm.Designer.cs and MyForm.resX. Make sure they are in the folder of your project
Add a dummy form (or usercontrol) with a dummy name: MyTempForm.
Save the solution and close it in Developer Studio
In a windows explorer delete the three MyTempForm files
Rename your three MyForm files in MyTempForm, with the same extensions.
Open your solution again in Developer Studio 2012
See that your MyForm is now fully available as MyTempForm
In the solution explorer rename MyTempForm back to MyForm
Assume that you want to import a Form called YourFormName. Then you should only add YourFormName.cs to the project - the rest parts (YourFormName.designer.cs and YourFormName.resx) will be added automatically.
steps:
Create WinForms project (in my case .Net Framework is 4.5.1) in VS2013
Right-click on projects -> Add -> Existing Item...
copy winform you want to import to the folder of your project. If you want to add it to a new folder then first create a folder then add.
Search for any WinForm with controls (I added two forms created in VS2010 for .NET framework 4)
in lesser than 10 sec visual studio added all the remaining files and i can open this in design mode.
After trying several methods the easiest way for me to use an existing WinForm was found to be: (similar to HaraldDuch’s answer) and tested only on VS2013:
1) Before moving your existing WinForm to the destination project’s source folder, create a dummy WinForm using the same name of your source WinForm.
2) Close your VS solution while saving.
3) Delete/Replace the newly created dummy set of WinForm files (*.cs, *.Designer.cs and *.resx) from Windows Explorer (off VS IDE) with the existing WinForm files you want to use.
4) Open VS to find your existing WinForm and you can rename it from VS IDE if you wish and you will need to change the namespace of the old WinForm to match your new project.
After doing a lot of testing and failing to correctly recognise the form when added, even though .designer and .resx were copying through when .vb was imported, I found Vidar's solution the best, least hacky fix.
It appears that if these references are not already in the project (if there are no forms yet), the form is not recognised as a form and is imported as a code module instead.
System.Drawing
System.Windows.Forms
These can either be added manually per their solution above, or you can simply
Add a new blank form to the project (this automatically adds the references above)
Add existing form .vb/.cs you want to import (it will now show the form icon in the Solution Explorer and 'View Designer' will be available from context)
Delete the blank form or use it for something else
This does not require editing any of the VS config files as shown in other answers to the question.
I tried almost all of the proposed solutions but none of them really worked for me. I finally ended up editing the csproj file myself. After I added the forms from another project into my new project, I opened the csproj file and I noticed that there was a missing part to the reference that was added by Visual Studio. Therefore, I edited the node according to the following template.
<Compile Include="NewForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="NewForm.Designer.cs">
<DependentUpon>NewForm.cs</DependentUpon>
</Compile>
Then I restarted Visual Studio and everything worked like a charm.
In my case, I have also noted that I can only ad one form at a time. You will get to see the forms as seperate items if you try to add multiple forms at the same time.
All that is needed in visual Studio 2012 is the following:
Copy the three files for the form into the project folder (.cs, .designer.cs and .resx)
Go to the project and add an existing object.
Select the .CS file
It will import and look like a standard code file. Double-clicking on it will not open the designer as mentioned above. However just click on save all files and then close and re-open the project, now it is recognized as a form and works correctly.
You can still use "Add Existing iTem"
"Add Existing iTem", select three files (.cs .resx .Designer.cs)
make sure "namespace Application" in your .cs file is the same as the project
now you can use auto-complete the Form you just added.
This worked for me just now (I have the same problem as you).
1. Created new winform with the same name, added something to it (so the resx file is created), saved and closed.
2. Replace newly created files with your original form.
3. Done
Drag and drop .cs files from filesystem to project tree in Solution Explorer (for example):
mainForm.cs
mainForm.Designer.cs
Don't forget about references if it is not Windows Forms project.
Although this is an old post, I was having the exact same problem as #MatthewRadford had described above. My workaround for this was to only add the .CS file (do not add the .resx file), and allow visual studio to automatically generate the .resx file right after adding the .cs file.
However, I found a permanent solution. If you began to experience this problem immediately after upgrading to a new version of visual studio, it is possible that during the upgrade, Active Reports was not registered properly. The solution is to deactivate your Active Reports (using GrapeCity License Manager), uninstall Active Reports, reinstall Active Reports from scratch, and reactivate your license. You should now be able to add the ReportName.cs and ReportName.resx, as well as the Designer.cs file, all at the same time, while having visual studio correctly handle their dependencies.
Just add the form file(form.vb or form.cs) other files will be created automatically.
The simplest solution that works for me is,
Close visual studio if its open
Copy all the 3 files (.cs, .designer.cs, .resx) into your project folder where all the other forms reside too.
Now open the project using visual studio.
Build the project
Open the form by right clicking it and selecting view designer, this will generate the proper designer.cs for the form. If you don't do this sometimes it might give an error saying
InitializeComponent doesnt exist int the current context.
Now you may open and edit the .cs code file
The new form will appear like a normal form in the solution explorer here after.
All you have to is to pass the .cs file. (The code file)

How to edit .csproj file

When I am compiling my .csproj file using .NET Framework 4.0 MSBUILD.EXE file, I am getting an error: "lable01" not found in the current context of "website01.csproj".
Actually, I need to add every ASP.NET page with its code-behind file's reference. I've done it, it's working fine, but the above error is pending.
I hope it means that I need to add form name "LABLE01" in that .csproj file, but I do not know the syntax. Anybody please do provide me with the syntax to add form name in .csproj file.
The CSPROJ file, saved in XML format, stores all the references for your project including your compilation options. There is also an SLN file, which stores information about projects that make up your solution.
If you are using Visual Studio and you have the need to view or edit your CSPROJ file, while in Visual Studio, you can do so by following these simple steps:
Right-click on your project in solution explorer and select Unload Project
Right-click on the project (tagged as unavailable in solution explorer) and click "Edit yourproj.csproj". This will open up your CSPROJ file for editing.
After making the changes you want, save, and close the file. Right-click again on the node and choose Reload Project when done.
Since the question is not directly mentioning Visual Studio, I will post how to do this in JetBrains Rider.
From context menu
Right-click your project
Go to edit
Edit '{project-name.csproj}'
With shortcut
Select project
Press F4
You can right click the project file, select "Unload project" then you can open the file directly for editing by selecting "Edit project name.csproj".
You will have to load the project back after you have saved your changes in order for it to compile.
See How to: Unload and Reload Projects on MSDN.
Since project files are XML files, you can also simply edit them using any text editor that supports Unicode (notepad, notepad++ etc...)
However, I would be very reluctant to edit these files by hand - use the Solution explorer for this if at all possible. If you have errors and you know how to fix them manually, go ahead, but be aware that you can completely ruin the project file if you don't know exactly what you are doing.
There is an easier way so you don't have to unload the project. Just install this tool called EditProj in Visual Studio:
https://marketplace.visualstudio.com/items?itemName=EdMunoz.EditProj
Then right click edit you will have a new menu item Edit Project File :)
in vs 2019 Version 16.8.2
right click on you project name
and click on "Edit Project File"
Here is my option to Edit the project file without the need to Unload the project:
Open Solution Explorer and switch to folder view:
Navigate to the Project which you want to edit inside the Solution folders and right-click on it.
Choose Open from the Context Menu.
That is it!
You will see the *.csproj file opened inside Visual Studio Editor.
After you can switch back to a Solution/Project view (see step 1).
Update:
Starting from the Visual Studio 2019 (v. 16) you can edit the *.csproj file by double-clicking on the Project, just make sure that you have the option turned On from the settings.
For JetBrains Rider:
First Option
Unload Project
Double click the unloaded project
Second option:
Click on the project
Press F4
That's it!
Sorry, most efficient way with out stuffing your proj file is.
right click the file.
goto properties
where Build Action option is set it to NONE.
Do a build (yes you may get build error if you do even better)
go back to properties of that file
set Build Action option is set it back to Compile.
rebuild.
Congratulate your self for being smarter than everyone else and not ****ing you project. For me this exercise took under 10 seconds. Where as manually trying to input the compile... line into the csproj not only can render your project unusable but it is also impossible to maintain on large scale application. Better to keep source version control software to do the updates. If you need to cross merge branches then doing the above is amazing :).
To open the .csproj file:
open the solution explorer
1
Click on the Edit Project File option
2
You can also open the .csproj by double-clicking on the project file. So no need to right click and select edit project file. Just double click and that is it.
It is a built-in option .Net core and .Net standard projects
For Visual Studio-version: 8.1.5,
Right click on the project folder.
Click "Tools", then "Edit File".
A little late to the conversation but I found a better option.
In rider you can enable "open project files with single click"
Just go to the solution options menu and then click in open project files with single click

Categories