在共享开发机(rdp)上使用IIS Express

11

我有一个问题,我认为可能很常见,在网上搜索了一下,但没有找到相关解答。

我们使用共享的开发机,每个开发者通过RDP连接,拥有自己的配置文件、桌面等。

我遇到的问题是关于IIS Express的。由于它是在用户级别配置的(在文档/iisexpress/config中的applicationhost.config),并且配置的端口必须与.csproj文件中声明的端口匹配,因此两个开发者不能在同一端口上运行,否则会出现“端口已被使用”的错误。

因此,为了使其正常工作,我们必须手动更改每位开发者的csproj和applicationhost.config中的端口,但这只是一个临时解决方案,因为当我们将更改提交到SVN时,csproj文件会被合并,所以每次有人提交/更新时都需要重做这个过程。

我的问题是:在共享的开发机上,是否有一种清洁的方式可以使用Visual Studio 2010和IIS Express?

谢谢。


1
使用Visual Studio开发服务器并自动分配端口是否可行,或者需要出于特定原因使用IIS Express? - Filburt
我们会尝试让IIS Express工作,因为它可以读取web.config中声明的IIS配置值,而Cassini则不能。我知道使用自动端口的Cassini有效,但我们只想找到正确使用IIS Express的方法。 - Matteo Mosca
FYI,IIS Express将成为下一个Visual Studio版本的默认选项。我不确定Cassini甚至会可用。 - John Saunders
这个问题我提出了将近3年了。上周我们终于拥有了本地的个人桌面来进行开发 :) - Matteo Mosca
4个回答

11

部分测试答案。不确定在多用户工作站上是否有效。它可能会为您或其他人提供一个起点,以便在现有环境中找到最佳解决方案。

看起来,Visual Studio将所有Web配置存储在csproj / vbproj中,而IISExpress将其配置存储在%userprofile%\ Documents \ IISExpress \ config \ ApplicationHost.Config中。

通常,我们将csproj文件存储在源代码控制中,但忽略csproj.user文件,以便每个人都可以拥有某些独特的设置,例如Web配置。

  • 登录计算机的每个用户都必须拥有自己的配置文件。
  • 每个配置文件必须拥有其自己的源代码副本。
    • 每个用户的源代码副本将包含他们自己的csproj.user文件。
  • 在源代码控制中忽略.**proj.user*文件。

通过取消选中“应用服务器设置到所有用户”选项,将Web设置复制到csproj.user中,然后提交到源代码控制。 unchecking the option Apply server settings to all users

拉取源代码副本的每个用户都必须配置自己的Web设置,使用其他用户未使用的唯一端口,并取消选中上面的框,以便他们的配置不会传递给其他用户。

这样做,每个配置文件都将拥有自己的IIS Express ApplicationHost.Config,并配置了与其他配置文件不同的端口。每个用户的源代码副本都将在其配置文件的IIS Express配置中使用相同的端口进行配置。

供参考:

我尝试更改IIS Express的ApplicationHost.Config以使用不同于Visual Studio期望的端口,但Visual Studio无法连接到IIS Express调试器。

IIS Express配置的工作原理:http://msdn.microsoft.com/en-us/library/ms178109.aspx


如此简单,却如此惊人。谢谢。这很有效,也是我们所采用的“rdp”方法中最干净的解决方案。 - Matteo Mosca
有人尝试过在Visual Studio 2013中使用这个解决方案吗?看起来“将服务器设置应用于所有用户”的复选框已被删除,因此我无法执行此操作。我也遇到了完全相同的问题。 - Jeff Stock
我自己还没有检查过,但看起来它已经在VS2013 Update1中恢复了。这是Connect票证:https://connect.microsoft.com/VisualStudio/feedback/details/800003/the-apply-server-settings-to-all-users-store-in-project-file-option-is-missing-in-vs2013 - Nick VanderPyle

0
最佳选项是利用内置在 MSBuild 中的导入功能
基本上,您将为每个用户创建一个单独的构建目标。然后,您可以直接从此引用的文件中导入此目标。 然后,我建议在服务器上(对于每个用户)创建此文件,但将其留在源代码控制之外。
这应该允许每个用户具有自定义的 IIS 端口,而不会与其他用户冲突。

这是否意味着每个用户只需一次创建不同的目标,还是针对每个项目都需要创建?因为如果只需一次,那可能很有趣,但如果每个项目都需要重复创建,那就会变得混乱。 - Matteo Mosca
我还没有直接测试过,但应该是一次性的。因为您将只导入与IIS设置相关的配置文件子集。(尽管导入行必须针对每个项目添加一次,但可以引用相同的文件) - Frazell Thomas

-1

我认为你可以为每个用户创建子域,并实施所需的更改并进行测试。这样,每个用户都可以拥有自己的子域和端口,因此可以在共享的IIS Express上独立工作。


一个混乱的解决方案,不适用于多个项目。 - one.beat.consumer

-1

也许我的回答不会让你满意,但这是我的想法:

正如你所注意到的,配置与用户配置文件相关联,而不是服务器;这是因为 IIS Express 不打算用作共享开发服务器。您应该使用完整的 IIS。

我没有看到在开发中使用同一物理框有任何好处或理由。诚然,我不知道您的许可证或工作站资源的所有细节,但似乎您从让每个人 RDP 到框中使用 Visual Studio 中并没有获得太多好处 - 每个人仍然需要许可证,性能会变慢,并且您不应该在同一个项目实例上工作。

您应该认真考虑整个开发设置:

每个开发人员都应该在他们的工作站上使用 Visual Studio,并使用配置了相同端口和设置的 IIS Express 进行调试/测试(非常容易)。

从那里开始,您的开发人员应该将他们的代码检入源代码控制,并检查可能出现的冲突。我不确定 SVN,但 TFS 中可用的 MSBuild 自动化可以用于设置连续构建策略,以部署到通用 IIS 安装,以便从上述完整的 IIS 安装中测试和使用合并的代码。

其他任何方法都只是一种变通/黑科技,会在以后给你带来麻烦。


你的解释中关于本地副本/ SVN 的部分已经很清楚了。每个用户都有自己的配置文件、桌面/设置等,只是我们有两个开发服务器(具有相同的配置、安装插件等),我们连接到其中一个进行开发。我没有权力决定这个决定是否好,这是一家大公司,我只是一个开发人员。我只是试图找出改进事物的方法,仅此而已。我担心不会有任何干净的解决方案。我害怕我们将不得不回到 Cassini。 - Matteo Mosca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接