使用多个项目发布Web应用程序

时间:2016-01-17 05:56:32

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

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

2 个答案:

答案 0 :(得分:1)

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

如果sub project没有bin文件夹,那么它在assemblies中使用的project的加载方式就知道了。

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

答案 1 :(得分:1)

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

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

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

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