Visual Studio 在发布时成功使用共享项目 wwwroot 文件,但在构建/运行时没有成功
Posted
技术标签:
【中文标题】Visual Studio 在发布时成功使用共享项目 wwwroot 文件,但在构建/运行时没有成功【英文标题】:Visual Studio Successfully Using Shared Project wwwroot Files on Publish but not on Build/Run 【发布时间】:2021-11-12 23:58:30 【问题描述】:背景
我在 Visual Studio 2019 中工作。我有一个 C# Web APP Razor Pages 项目,它引用了几个 C# 类项目和一个 C# 共享项目,用于在其他几个相关 Web 应用项目中通用的文件。
问题
当我将 Web 应用程序项目发布到我的本地或远程 IIS 实例时,没有问题,共享的项目文件,所有这些文件都存在并按预期工作。 p>
但是,当我“只是”构建/运行然后在浏览器中查看它时,共享项目 Helper 和 Pages 符合预期,但共享项目 wwwroot 文件在操作中全部丢失。
想要的
我可以,但不想不得不在每次我需要查看/解决共享项目中的任何问题时在本地发布,所以...
我想找到一种方法让共享项目 wwwroot 文件夹资产在 Build/Run 上可用 - 并且 - 能够以不产生不利影响的方式进行操作Publish 进程,它当前在其中按预期工作。
Deets
相关项目的示例文件夹结构(可能是 tmi,但足够详细,如果我必须对从一个项目到另一个项目的路径做一些事情,这些相对路径对于制作示例来说足够正确)......
inetpub wwwroot MyNameSoftware wwwroot Publish 上结束,耶
我的名字 MyName.Common.Domain MyName.Common.Domain.csproj 文件 各种文件夹和带有类的子文件夹 MyName.Common.Presentation.Web MyName.Common.Presentation.Web.shproj 文件 助手 页面 wwwroot Publish 上可用,但在 Build/Run 上不可用 一个容器文件夹 其他不相关的东西和事情 MyName.Software MyName.Software.sln 解决方案中包含的相关项目的各种其他 MyName.Software.Purpose 文件夹 MyName.Software.Web 各种其他文件夹和子文件夹 wwwroot Build/Run 和 Publish 上都可用 MyName.Software.Web.csproj 文件
从这里去哪里
当我列出我尝试过的方法和遇到的问题时,有些事情已经到位。喜欢这个过程,讨厌预处理过程。所以我已经在这里回答了我自己的问题,但会继续发布这个,以便我稍后可以参考它,所以也许它会帮助其他人保持一些头发。此外,如果有其他方法可以做到这一点,请带上他们——考虑替代方案总是好的。 :0)
【问题讨论】:
【参考方案1】:经过研究和整理...
...以下内容在 Build/Run 和 Publish 上对我有用(无论是通过右键单击项目选择发布还是通过命令行msbuild w/在构建时部署)。
(1) 将发往 wwwroot 的文件存储在另一个文件夹中,例如 _wwwroot,并调整项目文件,使其不会直接发布:
网络应用项目的 .csproj:
<ItemGroup>
<Content Remove="_wwwroot\**\*" />
</ItemGroup>
共享项目的 .projitems(请注意此处没有 CopyToPublishDirectory 或 CopyToOutputDirectory 标签):
<ItemGroup>
<Folder Include="$(MSBuildThisFileDirectory)_wwwroot\**\*" />
</ItemGroup>
(2) 将构建事件添加到 Web 应用项目
一个预构建事件,用于删除 Web 应用项目的 wwwroot 文件夹中的所有内容(因此每个构建都以全新的状态开始)
rd /s /q "$(ProjectDir)wwwroot"
每个网络应用项目中的 2 个构建后事件
xcopy /E /Y /I "$(ProjectDir)_wwwroot" "$(ProjectDir)wwwroot"
xcopy /E /Y /I "$(ProjectDir)..\..\..\MyName.Common.Presentation.Web\_wwwroot" "$(ProjectDir)wwwroot"
(3) 将每个 Web 应用项目的 wwwroot 设置为在签入源代码控制时忽略,因为 _wwwroot 文件夹将被签入并被视为记录源
(4) 引用所有将正常存在于 wwwroot 文件夹中的内容,就好像它们一直存在一样,因为它们会在需要时出现在 wwwroot 中
【讨论】:
以上是关于Visual Studio 在发布时成功使用共享项目 wwwroot 文件,但在构建/运行时没有成功的主要内容,如果未能解决你的问题,请参考以下文章
2019-12-06Visual Studio 2017安装时共享组件、工具和 SDK安装位置不能更改的问题
在 Visual Studio 2013 中添加对您自己的 DLL 项目的依赖项/引用
使用 Visual Studio,如何防止网络共享上的发布项目被用户锁定?
Visual Studio 解决方案:静态项目还是共享项目?