背景
我在Visual Studio 2019工作。我有一个c# Web APP Razor Pages项目,它引用了几个c#类项目和一个c#共享项目,用于多个其他相关Web APP项目的通用文件。
问题当我将web应用程序项目发布到本地或远程IIS实例时,没有问题,共享的项目文件,所有这些文件都存在,并且按预期工作。
然而,当我"just">构建/运行然后在浏览器中查看,共享项目Helper和Pages如预期的那样,但共享项目wwwroot文件在操作中都丢失了。
希望
我可以,但不希望有,本地发布每次我需要看到/故障排除共享项目中的任何东西,所以…
我想找到一种方法为共享项目wwwroot文件夹资产可用于构建/运行和-能够做到这样的方式,以免对发布进程产生不利影响,其中它目前按预期工作。
以
相关项目的示例文件夹结构(可能是tmi,但足够详细,如果我必须做一些从一个项目到另一个项目的路径,这些相对路径将是足够正确的一个例子)…
- inetpub
- wwwroot
- MyNameSoftware
- wwwroot <——所有来自web应用程序和共享项目的wwwroot文件都结束在这里Publish, yay
- MyNameSoftware
- wwwroot
- 的名字
- MyName.Common.Domain
- MyName.Common.Domain。csproj文件
- 包含 类的各种文件夹和子文件夹
- MyName.Common.Domain。csproj文件
- MyName.Common.Presentation.Web
- MyName.Common.Presentation.Web。shproj文件
- Helpers <——工作正常
- Pages <——工作正常
- wwwroot<——这些文件在>Publish上可用,但在Build/Run 上不可用
- aContainerFolder
- 其他不相关的东西
- 的名字。软件
- MyName.Software.sln
- 各种其他MyName.Software。{Purpose}文件夹用于解决方案 中包含的相关项目
- MyName.Software.Web
- 各种其他文件夹和子文件夹
- wwwroot<——这些文件可以在>Build/Run和Publish 上使用
- MyName.Software.Web。csproj文件
- MyName.Common.Domain
何去何从
当我列出我所做的尝试和我所遇到的问题时,一些事情变得清晰起来。喜欢这个过程,讨厌之前的拉扯头发。所以我已经在这里回答了我自己的问题,但是我会继续把它贴出来,这样我以后可以参考它,所以也许它会帮助别人留几根头发。此外,如果有其他方法可以做到这一点,那就带上它们——考虑替代方案总是好的。: 0)
经过研究和整理…
…以下是在构建/运行和发布上为我工作(无论是通过右键单击项目-选择-发布还是通过命令行msbuild w/部署构建)。
(1)将用于wwwroot的文件存储在另一个文件夹中,例如_wwwroot,并调整项目文件,使其不直接发布:
web应用程序项目的。csproj:
<ItemGroup>
<Content Remove="_wwwroot***" />
</ItemGroup>
共享项目的.projitems(注意这里没有CopyToPublishDirectory或CopyToOutputDirectory标签):
<ItemGroup>
<Folder Include="$(MSBuildThisFileDirectory)_wwwroot***" />
</ItemGroup>
(2)添加构建事件到web app项目
一个预构建事件,用于删除web应用程序项目的wwwroot文件夹中的所有内容(因此每次构建开始时都是干净的)
rd /s /q "$(ProjectDir)wwwroot"
和每个web应用项目中的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中