Publishing RDLC files - c#

I have a few RDLC files in my WPF application. When I publish the project, the report files don't get published, and when I try to access them with the client I get an error saying that they're not found. I've checked the publish folder, and indeed, they're not there. I call the RDLC files with the following code:
Microsoft.Reporting.WinForms.ReportViewer rvReportViewer;
/* ... */
rvReportViewer.LocalReport.ReportPath = string.Format("Reports/{0}.rdlc", ReportName);
I've tried setting the Build Action on these to "Resource", which is what I have for my static image files, but that doesn't seem to make any difference.
Why don't the reports get copied to the publish directory? Is there a way to force this to happen, or should I be accessing them in some other way?
Thanks!

I don't know if there's special concerns with RDLC files, but here's the general approach for making sure other files get published.
Right click the file in the solution explorer, select Properties. Set the "Build Action" to "Content", and "Copy to output Directory to "Copy if newer".
Go to the project properties->Publish page. Hit "Application Files Button", check "Show all files". Set the "Publish Status" to "Include (auto)"
File Properties
Application Files

I've been using the answer by #nos for a while, but I noticed that in the publication, the set of .rdlc-files is copied to two places:
The original webapplication project relative location;
Inside the bin folder.
So if I had \Reports\Report1.rdlc, I would find in the published location:
1. <published folder>\Reports\Report1.rdlc;
2. <published folder>\bin\Reports\Report1.rdlc.
I don't mean to use copies of the rdlc's in the second location and, indeed, if I delete these, the reports are still generated.
I changed the settings for each rdlc-file to:
Build Action: Content;
Copy to Output Directory: Do not copy.
And now nothing is written to the second location.

Sorry guys this has nothing to do with "Copy Always" or "Copy if Newer". In fact I set it to "Never Copy".
This issue is resolved by changing the Build Action from "Embedded Resource" to "Content". Then when you build and publish RLDC files will get copied to the right place.

instead of using .ReportPath
**used the following code:
reportViewer1.LocalReport.ReportEmbeddedResource="[Project
Name].[FolderName if Exist].[ReportName].rdlc";
Then rebuild your deployment Project.

Related

Getting ".ebextensions" to copy from Visual Studio

The root of my problem is that I want to get HTTPS working for a Blazor app deployed to AWS Elastic Beanstalk. According to all the documentation I'm able to find, I need to add some config files to an ".ebextensions" folder. I've done that. I've marked them with a "Build Action" of "Content" and set "Copy to Output Directory" to "Copy if newer". I've even edited the "csproj" file and set the "CopyToPublishDirectory", trying both "true" and "PreserveNewest". None of these things have helped. The files get copied to the local "bin" folder properly as I'd expect. However, after running the "AWS Toolkit" to publish, the files never seem to make it to the server.
Any ideas?
Thanks in advance!
It turns out the files were being copied all along and are getting applied. I just didn't have enough visibility into the process, and the folder is either hidden or removed after use.
On to the next problem...
Now to get HTTPS actually working! 😀

How can I fetch a file to be read in StreamReader and listed in a ListBox? [duplicate]

Task is to form Visual Studio 2010 project so, that during any build or publish some foo.exe utility should be copied to output (bin) directory.
Early I have made PostBuildEvent task in .csproj (MSBuild-file):
<PropertyGroup>
<PostBuildEvent>
Copy "$(SolutionDir)Tools\foo.exe" "$(ProjectDir)$(OutDir)foo.exe"
</PostBuildEvent>
</PropertyGroup>
But this is not universal. During publishing (Visual Studio 2010) foo.exe appears in bin directory, but is not copied to output publish directory. Maybe I do everything completely wrong and there is standard mechanism to include files in projects to be later, during build or publish, copied to bin?
There is and it is not dependent on post build events.
Add the file to your project, then in the file properties select under "Copy to Output Directory" either "Copy Always" or "Copy if Newer".
See MSDN.
I only have the need to push files during a build, so I just added a Post-build Event Command Line entry like this:
Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"
You can set this by right-clicking your Project in the Solution Explorer, then Properties > Build Events
In Solution Explorer, please select files you want to copied to output directory and assign two properties:
- Build action = Content
- Copy to Output Directory = Copy Always
This will do the trick.
Add the file to your project.
Go to the Properties of that file.
Set "Build Action" to Embedded Resource.
Set "Copy to Output Directory" to Copy Always.
There is another way that can copy items that are "outside" the Solution (which also makes it technically possible to copy Solution Items as well).
In Solution Explorer, right-click in your project and choose "Add... Existing Item". Locate the file in question (it can by any type, not just code), and next to the "Add" button, click the drop-down arrow and select "Add As Link".
In Solution Explorer, select the item that was just added to your project and change the Copy to Output Directory property to Copy if newer or Copy always, as appropriate.
In my case, setting Copy to Output Directory to Copy Always and Build did not do the trick, while Rebuild did.
Hope this helps someone!
Try adding a reference to the missing dll's from your service/web project directly. Adding the references to a different project didn't work for me.
I only had to do this when publishing my web app because it wasn't copying all the required dll's.
Just so my fellow neuronically impaired comrades might chance upon it here, I had assumed that, for web projects, if the linked file was an external .config file that the "output directory" would be the same directory that web.config lives in, i.e. your web project's root. In retrospect, it is entirely unsurprising that it copies the linked file into the root/bin folder.
So, if it's an appSettings include file, your web.config's open tag would be
<appSettings file=".\bin\includedAppSettingsFile.config">
Duh.

VS solution folder not generating in the bin/debug or release folder

I have added a solution folder on my visual solution project.
I have added some text files inside that folder.
I have Built and Rebuilt my solution but still nothing.
The error I get when trying to access a file from the folder:
System.IO.StreamReader file0 = new System.IO.StreamReader(Path.Combine(Environment.CurrentDirectory, #"newFolder\SampleText.txt"));
An unhandled exception of type 'System.IO.DirectoryNotFoundException' occurred in mscorlib.dll
Additional information: Could not find a part of the path 'I:\Programming\Projects\SampleProject\SampleProject\SampleProject\bin\Release\newFolder\SampleText.txt'.
The path to the Release folder is valid, but newFolder is not inside.
I don't understand why it is not being generated, any help would be great.
Click on your text file, change Copy to Output Directory to Copy if newer or Copy always. This will copy the file and any folder structure beneath it up to the project level and re-create it in the output folder.
The answers correct. You need to change "Copy to Output Directory" to "Copy Always" or "Copy If Newer" BUT YOU NEED TO DO ONE MORE THING. You need to choose Build Action as "Content". By doing so the folders that contain the files are generated in debug folder automatically without hassle. The other Build Actions may also work I am not sure but not "Resource" one.
If you set text file's property "Copy to Output Directory" to "Always" in solution then folder that contains this file will be created automatically
If you create your folder at the project level as opposed to the solution level, you can then go to each file in that folder and view the Properties (right-click / Properties). Here, can then set the "Copy to Output Directory" option to "Copy Always" or "Copy if newer", whichever one is appropriate for your purposes.

Deploy external file in c# solution with clickonce

I've a problem with Visual Studio Express 2010 c# edition.
I've a project that reference a DLL. This DLL has an external Excel file marked as
Build Action = Content
Copy to Output Directory = Copy Always
When I build the solution, this Excel file is correctly copied into BIN\release solution folder.
BUT if I try to deploy the same solution, with Publish wizard, the Excel file is not copied in the install directory.
Please, could anyone help me?
Open the Publish properties for your ClickOnce project. Then click on the 'Application Files ...' button. That launches a dialog where you can control which files are being included in the publishing package.
In order for your XLSX file (or any other non build file) to appear in that dialog you need to mark is as 'Content' in the Build Action of the properties window.
Are you saying that the Excel file is referenced only by the dll you are including in your project? That is a secondary reference, and ClickOnce will not see it and automatically include the file.
First, on your dll, I'm assuming it is referenced directly by your project. If so, then be sure you have added it to your project and set the Build Action to "none" and "copy to output directory" to "do not copy". Then delete your reference to it and re-add it, pointing it to the version now included in your project. Set the "copy local" property to "true". This will ensure the dll itself gets deployed correctly.
For the Excel file, you are going to have to add it to your project. Set the build action to "content" and set "copy to output directory" as "copy always". It will not be included automatically because it is a secondary reference to the ClickOnce app, not a direct/primary reference like the dll is.
Try to include this file into solution and set "Copy to Output Directory" to "Copy always"
It appears your file is not listed in the "PublishFiles" list. Open the Projects Properties, go to "Publish" Tab, click on "Application Files" button, make sure you see the DLL file in the list of files with Publish Status as "Include".
You could avoid the problem by inserting the Excel file as a resource, then writing it out like this:
File.WriteAllBytes(DestinationFileName, Properties.Resources.MyResourceFile);
I'm making an assumption that the Excel file is some kind of template you are using to build an output file from.

unable to compile the c#.net project ..getting error "resources was specified more than once "

The item "obj\Debug.resources" was specified more than once in the "Resources" parameter + c#.net
Did you by any chance copy/paste a Form?
the error tells you there is more then 1 class in the project with the same name.
For the others: the problem is reproducable using the following steps:
create a new smart device project.
copy/paste Form1. (so Visual Studio creates the files "Copy of Form1.*)
Build.
sure you don't have any duplicates?
If you don't have anything relevant in your resx files just delete them. VS will regenerate them and your project will compile. Do this only for the forms that you copy-pasted.
VS 2005?
See this: http://social.msdn.microsoft.com/forums/en-US/vbide/thread/4048e49f-3a6f-46ce-9efd-d046f7041e2e/
In your project file, if you open it in notepad, it will likely have the item listed twice. You can edit the project file or delete the resource file. If that doesn't help, also check the properties for your files, and make sure that they are correct, and have "Build Action" set to "Embedded Resource", "Copy to Output Directory" set to "Do not copy" for your resx files.
Try to clean up the project and then rebuild it again.

Categories