Publishing RDLC files

2019-01-31 18:35发布

问题:

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!

回答1:

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



回答2:

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:

  1. The original webapplication project relative location;
  2. 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.



回答3:

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.



回答4:

instead of using .ReportPath

  1. **used this below codes:

reportViewer1.LocalReport.ReportEmbeddedResource="[Project
Name].[FolderName if Exist].[ReportName].rdlc";
  1. Then rebuild your deployment Project.