【问题标题】:Publish Web Application with Multiple Projects发布具有多个项目的 Web 应用程序
【发布时间】:2016-01-17 05:56:31
【问题描述】:

我有一个 ASP.NET Web 应用程序,它由多个 ASP.NET 项目(除了多个类库)组成。显然其中一个项目是根项目,其余的都是子项目(这个应用程序结构的详细概念解释here)。每个子/子项目都有自己的目录,它们都位于根文件夹下我称为“模块”的目录中。由于 IIS 可以为每个应用程序处理一个项目,因此所有子项目都将被视为常规目录(在运行时)。因此,我将每个子项目的构建输出路径修改为“..\..\bin\”,即根 bin 文件夹。这样,我就可以正确设置所有内容。从 Visual Studio 的角度来看,我有幸在一个解决方案下拥有不同的项目。从 IIS 的角度来看,我有一个带有 one bin 文件夹和 one Web.Config 文件的项目。现在要发布了。如果我发布根项目(通过右键单击项目节点 --> 发布),发布的输出将是只有没有“模块”文件夹的项目。生成的 bin 文件夹也将丢失子项目输出 dll。这是意料之中的。所以我认为解决这个问题的明显方法是发布我所有的网络项目(不仅仅是根),记住我的子项目发布路径需要是根项目发布路径中的“模块”文件夹。除了一个基本问题外,所有这些都很好。事实证明,每个发布的子项目都有自己的 bin 文件夹,因此根 bin 文件夹包含子项目的输出 DLL。所以我想,虽然 Visual Studio 让我以我想要的方式指定每个项目的输出路径(正如我提到的,我将其设置为“..\..\bin\”),但 ClickOnce 发布不尊重这一点,只是为每个项目创建一个 bin 文件夹子项目。有没有办法指定 ClickOnce 发布过程的输出路径(bin 文件夹)?如果没有,有什么替代解决方案?

【问题讨论】:

    标签: asp.net visual-studio iis clickonce publish


    【解决方案1】:

    正如您所说,您有多个projects,其中一个是根项目。所以每个项目都应该有自己的bin 文件夹,因为它是project 而不是root projectsub folder

    如果sub project 没有bin 文件夹,它如何知道从哪里加载assemblies 中使用的project

    为每个子project 设置bin 文件夹并不是一个坏主意。

    【讨论】:

    • 来自我在问题中包含的链接。请检查这部分,希望这将使我的情况更清楚。 After you configure the child projects to share a common IIS application root directory, you can share resources between projects in the solution. For example, you can drag a user control from a shared resources project into an .aspx file in another project. Note that you can only do this after you configure the projects to share a common IIS application root. Visual Studio .NET does not allow you to share resources if the projects are still in separate IIS application root directories.
    • 所以从 IIS 的角度来看,我只有一个项目。从技术上讲,子项目将从根 bin 文件夹加载它们的程序集(我将所有子项目的输出路径明确设置为 ..\..\bin,这是根 bin 文件夹。
    【解决方案2】:

    here 提供的答案可能会解决您的问题。通过将以下属性添加到您的 .csproj 文件(根据链接答案修改),您可以通知 ClickOnce 在输出目录中包含其他内容:

    <ItemGroup>
        <Content Include="bin\**\*.*" />
    </ItemGroup>
    

    here 给出的另一个答案提供了一种将附加内容递归地包含到项目文件夹之外的项目输出中的方法,这可能适用于此;从根项目的角度来看,其他项目位于其文件夹之外。但是,我不确定 ClickOnce 是否会忽略这一点。

    <Content Include="..\..\MyContentFiles\**">
        <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    

    【讨论】:

    • 我还没有机会测试您的解决方案,但我相信它很有帮助。如果有效,我会标记为答案。谢谢,
    猜你喜欢
    • 2014-12-18
    • 2015-04-06
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多