Visual Studio 在发布时成功使用共享项目 wwwroot 文件,但在 Build/Run 上未成功
Visual Studio Successfully Using Shared Project wwwroot Files on Publish but not on Build/Run
背景
我在 Visual Studio 2019 年工作。我有一个 C# Web APP Razor Pages 项目,它引用了几个 C# Class 项目和一个 C# 共享项目,用于在其他几个相关 Web 应用程序中通用的文件项目。
问题
当我 发布 网络应用程序项目到我的本地或远程 IIS 实例时,没问题,共享的项目文件,所有这些文件,都存在,并且可以工作不出所料。
但是,当我“只是”build/run然后在浏览器中查看时,共享项目Helper和Pages是符合预期的,但是共享项目的wwwroot文件都在行动中失踪了。
想要
我可以,但不希望 每次我需要查看/解决共享项目中的任何问题时都在本地发布,所以...
我想找到一种方法让共享项目 wwwroot 文件夹资产可以在 Build/Run 上使用 - 并且 - 能够在诸如以免对当前按预期工作的 Publish 流程产生不利影响。
迪茨
相关项目的示例文件夹结构(可能是 tmi,但足够详细,如果我必须对从一个项目到另一个项目的路径做一些事情,这些相对路径对于制作示例来说足够正确)。 ..
- inetpub
- wwwroot
- 我的名字软件
- wwwroot <-- 来自 Web 应用程序和共享项目的所有 wwwroot 文件都在 Publish 上结束,yay
- 我的名字
- MyName.Common.Domain
- MyName.Common.Domain.csproj 文件
- 各种文件夹和子文件夹 类
- MyName.Common.Presentation.Web
- MyName.Common.Presentation.Web.shproj 文件
- 助手 <-- 工作正常
- 页 <-- 工作正常
- wwwroot <--- 这些文件在 Publish 上可用,但在 Build/Run[ 上不可用=90=]
- aContainerFolder
- 其他不相关的东西
- MyName.Software
- MyName.Software.sln
- 解决方案中包含的相关项目的各种其他 MyName.Software.{Purpose} 文件夹
- MyName.Software.Web
- 各种其他文件夹和子文件夹
- wwwroot <-- 这些文件在 Build/Run 和 Publish[ 上都可以按预期使用=90=]
- MyName.Software.Web.csproj 文件
从这里去哪里
当我列出我尝试过的内容和我遇到的问题时,有些事情就位了。喜欢这个过程,讨厌预处理过程。所以我在这里回答了我自己的问题,但我会继续 post 这个,这样我可以稍后再参考它,所以也许它会帮助其他人保持一些头发。此外,如果有其他方法可以做到这一点,请使用它们——考虑替代方案总是好的。 :0)
经过研究并将点点滴滴放在一起...
...以下在 Build/Run 和 Publish 上为我工作(通过右键单击-project-select-publish 或通过命令行 msbuild w/ deploy on build).
(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 个 post- 每个 Web 应用程序项目中的构建事件
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 2019 年工作。我有一个 C# Web APP Razor Pages 项目,它引用了几个 C# Class 项目和一个 C# 共享项目,用于在其他几个相关 Web 应用程序中通用的文件项目。
问题
当我 发布 网络应用程序项目到我的本地或远程 IIS 实例时,没问题,共享的项目文件,所有这些文件,都存在,并且可以工作不出所料。
但是,当我“只是”build/run然后在浏览器中查看时,共享项目Helper和Pages是符合预期的,但是共享项目的wwwroot文件都在行动中失踪了。
想要
我可以,但不希望 每次我需要查看/解决共享项目中的任何问题时都在本地发布,所以...
我想找到一种方法让共享项目 wwwroot 文件夹资产可以在 Build/Run 上使用 - 并且 - 能够在诸如以免对当前按预期工作的 Publish 流程产生不利影响。
迪茨
相关项目的示例文件夹结构(可能是 tmi,但足够详细,如果我必须对从一个项目到另一个项目的路径做一些事情,这些相对路径对于制作示例来说足够正确)。 ..
- inetpub
- wwwroot
- 我的名字软件
- wwwroot <-- 来自 Web 应用程序和共享项目的所有 wwwroot 文件都在 Publish 上结束,yay
- 我的名字软件
- wwwroot
- 我的名字
- MyName.Common.Domain
- MyName.Common.Domain.csproj 文件
- 各种文件夹和子文件夹 类
- MyName.Common.Domain.csproj 文件
- MyName.Common.Presentation.Web
- MyName.Common.Presentation.Web.shproj 文件
- 助手 <-- 工作正常
- 页 <-- 工作正常
- wwwroot <--- 这些文件在 Publish 上可用,但在 Build/Run[ 上不可用=90=]
- aContainerFolder
- 其他不相关的东西
- MyName.Software
- MyName.Software.sln
- 解决方案中包含的相关项目的各种其他 MyName.Software.{Purpose} 文件夹
- MyName.Software.Web
- 各种其他文件夹和子文件夹
- wwwroot <-- 这些文件在 Build/Run 和 Publish[ 上都可以按预期使用=90=]
- MyName.Software.Web.csproj 文件
- MyName.Common.Domain
从这里去哪里
当我列出我尝试过的内容和我遇到的问题时,有些事情就位了。喜欢这个过程,讨厌预处理过程。所以我在这里回答了我自己的问题,但我会继续 post 这个,这样我可以稍后再参考它,所以也许它会帮助其他人保持一些头发。此外,如果有其他方法可以做到这一点,请使用它们——考虑替代方案总是好的。 :0)
经过研究并将点点滴滴放在一起...
...以下在 Build/Run 和 Publish 上为我工作(通过右键单击-project-select-publish 或通过命令行 msbuild w/ deploy on build).
(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 个 post- 每个 Web 应用程序项目中的构建事件
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 中