我在我的Visual Studio解决方案中设置了一个项目,其中包含许多链接文件。这些是内容文件。
当我构建项目时,我想将链接文件复制到另一个位置。这是否可能,如何实现?
我在我的Visual Studio解决方案中设置了一个项目,其中包含许多链接文件。这些是内容文件。
当我构建项目时,我想将链接文件复制到另一个位置。这是否可能,如何实现?
对于像我这样偶然看到此页面的人,就像5arx的帖子所述,我实现了一个MSBuild目标,将所有链接的内容文件复制到它们的“虚拟”位置(在Visual Studio中放置链接的目录): http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx
我不得不依赖另一种技术。多年来,我一直在使用@user1147862的解决方案,但是在Visual Studio 2022/.NET 6中,它根本不起作用。Visual Studio似乎不再“看到”任何添加为链接的内容文件,并且复制操作基本上什么也没做。
所以现在我做的是,在我的情况下,我有一堆JS文件,我将它们包含到wwwroot/common/js下的多个项目中。我在CSPROJ文件中添加以下内容...
<ItemGroup>
<!-- Adds the files as links in the Solution Explorer.
When you double-click, it opens the original file. -->
<Content Include="..\..\Common\**\*.js">
<Link>wwwroot\Common\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>
<!-- Picked up by the Copy below. Using "Content"
with "Link" adds external files as links. But a custom
name is needed for use with Copy. -->
<CommonJs Include="..\..\Common\**\*.js" />
<!-- Tells Visual Studio to ignore any actual files at this location.
I found that if I didn't do this, Visual Studio sees the copied
file instead of the linked file. This tells Visual Studio to
ignore the copied file so that when I double-click it in
Solution Explorer, it opens the original copy. -->
<Content Remove="wwwroot\Common\**" />
</ItemGroup>
<Target Name="CopyCommonJs" BeforeTargets="Build">
<Copy SourceFiles="@(CommonJs)"
DestinationFiles="wwwroot\Common\%(RecursiveDir)%(Filename)%(Extension)"
SkipUnchangedFiles="true"
OverwriteReadOnlyFiles="true" />
</Target>
整个方法都是可行的,我现在理解了所有的部分,但我更喜欢旧的方式并希望它仍然能够工作。如果有人找到更优雅的解决方案,请告诉我。
如果您右键单击项目,然后选择“生成事件”选项卡,您应该能够创建一个后期生成事件脚本,该脚本将获取您指定的任何文件并将其复制到您指定的位置。
一个好的起点是这里
看起来只需简单地添加
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<None Include="..\configuration\Shared.OctopusDeploy.config">
<Link>Shared.OctopusDeploy.config</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Content Include="..\configuration\Shared.OctopusDeploy.config">
<Link>Shared.OctopusDeploy.config</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>