Why doesn't ClickOnce in Visual Studio deploy content files from dependent assemblies?

Solution 1:

I seemed to have found an evolution of the answer from @John Hunter that is much simpler, add this to the csproj.

<ItemGroup>
    <Content Include="Bin\**\*.rpt" />
</ItemGroup>

This will then make visual studio automatically view all *.rpt files in that folder as part of the solution. You could go with *.* to accumulate everything. This makes more sense if you have a container folder like bin\MyDeployables\**\*.*

We followed a similar usage for using Cassette MSBuild to combine and minifiy our JS at publish time, and be able to publish the created files through the built in VS publish tooling.

Solution 2:

I think my answer from this post answers your question.

Summary
Either...
Add your content files to your project using the "Add as link" feature.
Or...
Create a post-build event to copy your content files to the main output folder.

Solution 3:

Ok I still don't know why Visual studio cannot display referenced content files with its publish ui but I found a work around to force the publish to include these files.

As suggested by this MSDN article, put this in the project file.

<ItemGroup>
<AdditionalPublishFile Include="$(OutputPath)\**\*.rpt">
  <Visible>False</Visible>
</AdditionalPublishFile>
</ItemGroup>
<Target Name="BeforePublish">
  <Touch Files="@(IntermediateAssembly)" />
  <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(extension);IsDataFile=false">
    <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" />
  </CreateItem>
</Target>

Note that in some circumstances restarting Visual Studio (not just reloading the project) may be required for these changes to take effect.