【问题标题】:Visual Studio 2015 - Shared Projects Reference Tab Missing on Web ProjectVisual Studio 2015 - Web 项目中缺少共享项目参考选项卡
【发布时间】:2015-08-03 19:43:05
【问题描述】:

我从我们的 MSDN 订阅升级到 Visual Studio 2015,因为我很高兴读到共享项目...当我们只想重用代码时,无需再管理依赖项中的 21382 nuget 包。

所以我构建了一个测试共享项目,其中包含一些代码。然后我在 .Net 4.6 上将一个新的空 Web 应用程序添加到项目中。现在我希望去参考并在参考窗口上看到“共享项目”选项卡,但我没有看到。

现在我可以将一个类库添加到同一个解决方案中,我会看到选项卡并可以添加共享引用。但是我无法将共享项目添加到我的 Web 应用程序中。

我更希望可以使用这个概念与多个 MVC 项目共享视图。

是我遗漏了什么,还是共享项目与 Web 项目不兼容?

我看到的唯一方法是为我构建的每个 Web 应用程序创建两个项目。 1 代表代码,1 代表内容。

例如

XYZ.SomeWebSite.Code (Class Library Project Type) -> references Shared Project
XYZ.SomeWebSite (Web Project Type)

无论如何,我无法将视图、文本文件、css 文件、javascript 文件等推送到 Web 应用程序中。

【问题讨论】:

  • 我提交了一个关于这个问题的详细信息......希望这是一个oversite......它开始看起来像是专门为Windows Store Apps和Windows Phone 8创建的共享项目和Protable Class Libraries心态...
  • 刚找到一个 RTM 发行说明:visualstudio.com/en-us/news/vs2015-vs.aspx Web 项目类型未列为受支持,但它来自 RTM,在发行版中找不到任何内容。
  • 上周我注意到了同样的事情。有点烦人。我们有三个门户网站应用程序,并希望集中我们的资产(css、图像、主题、字体)。共享项目似乎是解决问题的好方法,但是当我尝试添加参考时,看到的结果与您所做的相同。
  • 我最近在生产环境中遇到了一个问题,我认为使用共享项目对 IIS 网站不利,也许这就是它不存在的原因。有人告诉我要在一个应用程序池中启动 2 个站点,但它让我大吃一惊,因为我的代码是通过共享项目编译到这两个站点中的。他们不能同时加载到同一个应用程序池中,因为所有类型都会存在两次......我能够说服他们运行 2 个单独的应用程序池,但对于为什么它可能不好,这仍然是一个灯泡时刻。

标签: c# asp.net-mvc-5 visual-studio-2015 .net-4.6 shared-project


【解决方案1】:

[临时答案]

我能够通过手动编辑我的 Web 应用程序的 csproj 文件来解决此问题。

步骤如下:

  1. 卸载 Web 应用程序项目
  2. 通过右键单击项目并单击编辑来编辑 *.csproj 文件...
  3. 现在查找 ProjectTypeGuids 元素。

    {349C5851-65DF-11DA-9384-00065B846F21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}

第一个 guid 是 ASP.Net MVC 5 项目的 guid,第二个 guid 是 C#。

您需要做的只是暂时删除第一个 guid 和分号,只留下 c# guid(第二个)。

重新加载项目并添加您的共享项目。全部添加后,编辑项目文件并将第一个 guid 和分号放回去。

重新加载项目。

共享项目引用仍然存在,它将构建并链接到您的 Web 应用程序。

或者,你可以手动添加共享项目引用,格式是这样的

<Import Project="..\XYZ.UPlugin\XYZ.Plugin.projitems" Label="Shared" />

【讨论】:

  • 更新:经测试,如果您在共享项目中创建 Assets 文件夹,该文件夹将不会存在于目标项目的物理磁盘空间中。但是,如果您发布您的网站,它将存在于发布目标中。因此,如果您想在本地测试而不发布,则需要将 iis 中的虚拟目录映射到共享项目中的 assets 文件夹。
  • 我一直在使用的一个不错的模式是将共享项目的根命名空间更改为它的根。例如,使用“XYZ”而不是“XYZ.Something”,然后在其中创建一个名为 Something 的文件夹。将您的代码放在那里,它将默认使用“XYZ.Something”的命名空间,并使您的代码与您的根级资产、资产/css/js 文件夹等分开。
  • 它把它变成一个类库,你添加你的引用,然后把 guid 放回去,它就会恢复到以前的任何类型。没有正确的方法可以做到这一点,它不受支持。这就是为什么这个答案说它在上面是临时的,直到有合适的方法来做。
  • 值得注意的是,虽然它说&lt;Import Project=... /&gt;,但扩展名不是项目文件扩展名.shproj,而是文件.projitems。后一个文件与项目文件位于同一目录中。
  • 另外值得注意的是:手动添加项目引用也适用于 Visual Studio 2017 版本 15.6.3 以及新的 csproj 文件格式 () .要在 VS 2017 版本 15.6.3 中创建共享项目,请使用模板树根目录中名为“共享项目”的模板。
猜你喜欢
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多