如何在项目运行之前处理由Visual Studio创建/修改的.csproj.user?

时间:2014-04-01 15:30:56

标签: visual-studio visual-studio-2012

那么,问题是什么?

问题是Visual Studio认为.csproj.user是正在运行的项目的依赖项。

让我们假设以下内容:

  • 我们有一个新构建的解决方案,其中包含一个Web应用程序项目X作为启动项目。
  • X Web应用程序提供了Silverlight应用程序。
  • 最初没有X.csproj.user个文件。

现在考虑以下事件流程:

  1. 在Visual Studio中打开解决方案
  2. 构建
  3. 运行。
  4. 打开一个对话框,询问是否启用Silverlight调试。启用它。
  5. 停止调试会话。
  6. 再次跑步。
  7. 停止调试会话。
  8. 再次跑步。
  9. 假设步骤2中没有构建任何内容(因为解决方案完全是最新的),是否会在步骤3和6中构建任何内容?

    答案是肯定的,原因如下:

    • 当请求运行项目时,X.csproj.user文件实际上是由Visual Studio创建的。接下来会发生的是X.csproj.user文件被Visual Studio视为项目X的依赖项。刚刚创建的文件比项目二进制文件更新,因此Visual Studio构建项目X。这解释了为什么项目是在第3步建立的。
    • 当我们同意启用Silverlight调试时,Visual Studio会在X.csproj.user文件中记录此协议。因此,在项目开始运行后,文件会再次被修改。重新启动调试会话将再次构建项目X,之后所有X.csproj.user再次比一秒钟之前构建的二进制文件更新。这解释了为什么该项目是在步骤6建立的。

    幸运的是,第8步没有建立。

    叫我小气,但我想避免在第3步和第6步的构建。问题是我不能检查X.csproj.user文件,因为这可能会造成人们意外的混乱检查他们的私人变化。

    另一方面,我无法将其默认内容(以及启用Silverlight调试的协议)移动到X.csproj。嗯,我可以,但它只是被忽略了。

    所以,这是我的问题 - 是否可以将.csproj.user中存储的内容分成两组:

    • 常驻。这些是我希望在.csproj文件中拥有的内容。它将被签入。
    • 临时/私人。这些是个人开发人员私有的东西。从未登记过。

    Visual Studio已经允许对某些属性进行此分离 - 请参阅Web应用程序项目的Web属性选项卡中的将服务器设置应用于所有用户(存储在项目文件中)复选框 - {{3} }。但是,这还不够。

    关于如何防止上述冗余构建的任何其他想法也是受欢迎的。

0 个答案:

没有答案