Visual Studio成功使用共享项目wwwroot文件发布,但没有在构建/运行



背景

我在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

  • 的名字
    • MyName.Common.Domain
      • 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/RunPublish
          • 上使用
          • MyName.Software.Web。csproj文件

何去何从

当我列出我所做的尝试和我所遇到的问题时,一些事情变得清晰起来。喜欢这个过程,讨厌之前的拉扯头发。所以我已经在这里回答了我自己的问题,但是我会继续把它贴出来,这样我以后可以参考它,所以也许它会帮助别人留几根头发。此外,如果有其他方法可以做到这一点,那就带上它们——考虑替代方案总是好的。: 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中


相关内容

  • 没有找到相关文章

最新更新