This may not really sound hard to do but it is currently killing me. Currently i have a Visual Studio 2008 C# Project that i use in conjunction with a DAL generator , its nothing fancy at all besides generating files that i can use in the project to access the database.
The problem i am having is that after the generator has run and the files are created they never show up in my project (new files , old existing files are fine). To add them i have to show hidden files (In visual studio) then include all of the files manually. So is there anyway to automatically include these files into my project.
Thanks in advance
In VS2008:
1) Right click on your project node.
2) Select "Unload project".
3) Right click on the project node.
4) Select "Edit foo.csproj"
5) In the element add a element that includes your DAL files using wildcards like:
<Compile Include="DAL_*.cs" />
or
<Compile Include="DataAccessLayer\*.cs" />
6) File.Save
7) Right click on the project node.
8) Select "Reload project".
To learn more about this read up on MSBuild.
I suppose the easiest way would be to write a tool to automatically modify the .csproj file, which is just XML, so that it includes your new items.
I'd go one further than mquander and say generate the whole project file for your DAL. When it changes I think VS should prompt you to reload it.
The csproj is an msbuild file and isn't that hard to comprehend.
Related
I want to add a small piece of information such as a software package version I have on my machine to my C# executable.
I want this info pulled on the fly during every build of my program. The info is just 1 line in a text file saved somewhere on C:\
The info needs to be accessible to my program, when I click a button within it, it should display that line of text it grabbed during the build.
Perhaps this could be accomplished by putting the info into a custom environment variable, which gets propagated during a build by adding a before build target. Not sure how to do that, if its even possible. Im using VS2008.
Please share your ideas!
VStudio has the option of performing pre-build steps. In our build, we have a batch file that executes tools that in turn generate a small file of C# which is then built by the build process. It's not very elegant, but has the benefit of simplicity and it works.
If you are the only person to be building this (or everyone building it has this text file in the same location), you could add your text file to your project as a linked item.
This way the file would be included with your project without creating a copy so any updates to it would be propagated to your project.
Right-click the project in solution explorer
Add->Existing Item...
Once you have navigated to your text file, click the down arrow icon at the right edge of the add button and select "Add as Link"
These steps are copied from this answer to a different question. That question was dealing with VS2010, but this should work in VS2008 just the same.
Or maybe access it's data via reflection somehow ?
Thanks
EDIT: I'd like to know if there's a way to do it without reading it as an XML.
Like a ms library that supports it, so it'll work for any kind of project and any kind of vs version (2005, 2008, 2010 ... ).
The *.csproj file is really just an XML file. You can open it just like any other XML file and treat it as such as well. Realize that any changes made to it, though, will require reloading the project.
Also, remember, there is no *.csproj file once the application is compiled/deployed.
Yes, you can open it in a text editor, or from Visual Studio
Right click on a project
Unload Project
Right click on the unloaded project
Edit project
Right clicking the project and selecting the properties option gives you a GUI to change some of the settings in the project file. Also, when you right click a file and change it's properties it causes a change in the project file. If you want to do anything very serious, like add custom build steps, you have to do it by hand in a text editor like notepad++. It's just an XML file. If you're familiar with MSBuild the proj file has many similarities to a build script for MSBuild.
Short version: I want Visual Studio 2010 to save the solution and project files to the default "My Documents" directory, while regarding my actual project directory on Dropbox as the place to put source files.
I know I can "Add Existing Item" from the project menu, but that's hardly an acceptable solution as I have to manually create absolutely every file I'm to work with in VS from explorer. I've tried adding my project folder to the project, but that just resulted in VS lying to my face:
Is it possible to actually separate Visual Studio's fugly meta files from my project directory? If not, what would be the best workaround?
I might have to do my C# in Vim because of this...
NOTE: I know C++ projects has the "Add Filter" function, which appears to do almost exactly what I want, but I'm working with C#.
Workaround
Create a symlink from the actual project folder in Dropbox to Visual Studio's project folder, e.g:
C:\Users\tomas>mklink /J "...\Visual Studio 2010\Projects\Testing\Journal\journal" "...\Dropbox\Projects\cs_testing\journal"
Junction created for ...\Visual Studio 2010\Projects\Testing\Journal\journal > ...\Dropbox\Projects\cs_testing\journal
Then add the symlink to the project as an "External Item". Now Visual Studio thinks it's being devious and adding all new files to its own project directory, but they are actually ending up in my Dropbox.
Drawbacks
Every item added to the project must be put in the symlink subfolder.
Items automatically add themselves to the namespace "<project>.<subfolder>.*", so on my case an added class was automatically called Journal.journal.JournalForm.
It's tedious to do this for every project.
There are probably more, but I just discovered this workaround. I'll edit this answer later if necessary.
I'm writing an application that will enable the creation of SQL files within visual studio. The user will enter commands via the Package Manager console which will generate sql scrips and deposit them in a specific directory within the Visual Studio Project.
The problem I have is that, when the files are generated, they are present on the file system, but not in Visual Studio. This is expected of course, as I need to then go and actively include the files within Solution explorer, but this isn't what I want. I want the files to "Magically" appear in solution explorer immediately after they're generated.
I've seen various solutions to similar problems mostly featuring amendments to the .csproj file such as this
<Compile Include="Sql\**\*.sql" />
but this isn't what i'm looking for. What i'm after is similar to how, for example, Entity Framework or MvcScaffolding work, where files / folders just magically drop into the project when commands run in PMC. I'm aware this runs off T4 templating, but that seems like too complex a solution for a simple issue like this.
I should qualify that there's no voodoo going on in the creation of the files, just plain old File.Create() stuff.
I'm open to any suggestions.
Thanks.
Check out this answer for a solution that worked for me. I have the same use-case where code outputs flat files and I need to include this output in the project.
At the end of your .csproj file add the following:
<Target Name="BeforeBuild">
<ItemGroup>
<Content Include="Sql\**\*.sql" />
</ItemGroup>
</Target>
IMHO, T4 is the way to go. You don't want to be bothering with older technologies for what you are trying to do.
Having said that, I wonder why is it required for the files to be added to the solution explorer? is it for source control purposes? (usually you don't want to source control auto generated files, you want to source control the original model).
Note that you could always click the 'show all' button and the files will appear in the solution explorer, without actually being a part of the solution.
I have finished my program in c#, hit build solution, and grabbed the exe out of the bin folder in my project directory. I noticed the description under the filename was "WindowsFormApplication1". I browsed briefly through any fields in the solutions explorer I might change, but nothing worked. Am I doing the right thing to release my program, and/or where can you change that description? I would like to just pass the exe around.
Two methods.
Right click on project=>properties=>Application=>Assembly Information...
Solution Explorer=>Project=>Properties folder=>AssemblyInfo.cs
You can change them in the project properties at Application -> Assembly Information....
If you're concerned about the meta data in general, you may want to disable the pdb at Build -> Advanced... -> Debug Info or the assembly will contain the full path to the .pdb file, wich usually contains the user name.
I'd like to add that in case you're working with multiple projects in one solution, one could create a separate build properties file. This way you don't need to set the properties per project.
Create the file Directory.Build.Props in the solution folder.
Add the following properties
<Project>
<PropertyGroup>
<Version>1.0.0.0<Version>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<FileVersion>1.0.0.0</FileVersion>
<Company>Stack Exchange Inc.</Company>
<Authors>Jeff Atwood, Joel Spolsky</Authors>
<Copyright>user contributions licensed under cc by-sa. rev 2020.10.26.37891</Copyright>
</PropertyGroup>
</Project>