【问题标题】:Visual Studio (C#) Build Output path using environmental variablesVisual Studio (C#) 使用环境变量构建输出路径
【发布时间】:2011-07-27 18:43:49
【问题描述】:

是否可以在 VS 2008 (et al) 的构建输出路径中使用环境变量/我正在尝试找到一个解决方案,我的团队中的几个开发人员同时使用 Windows XP 和 7,并且都使用不同的 Windows 登录,是否可以全部修改项目公共引用的 dll(源代码保存在 Source Safe 中)而不搞砸相对路径?我已经尝试过诸如 %userprofile% 和 $(userprofile) 之类的东西。

我研究了构建后事件,但这些似乎并不能真正解决我的问题。遗憾的是,我也无法使用第 3 方插件,因为这些插件是非商业性的,而且几乎不可能为它们获得任何许可证的授权。

Output path for build in visual studio 2010 上的类似未回答问题)

【问题讨论】:

    标签: c# visual-studio-2008 build


    【解决方案1】:

    您需要在文本编辑器中打开 csproj 文件并在 OutputPath 部分手动输入您的环境变量。当您尝试从 IDE 执行此操作时,Visual Studio 会转义“$”、“(”和“)”。

    【讨论】:

    • 我可以确认这是我必须自己做的答案。
    • 我觉得你必须这样做很蹩脚。
    • VS 2017 项目属性对话框似乎很好,而不是逃避它。例如,我使用了 $(localappdata) 并且它起作用了
    【解决方案2】:

    我过去曾使用subst 命令来完成这类事情。基本上所有项目引用都定义了与已知驱动器号(如R:\MyProject\outputs)相关的路径。

    然后每个开发人员都可以将R: 驱动器(或其他)映射到特定于其环境的文件夹结构。只要映射驱动器下的文件夹结构相同,映射文件夹的位置就会因机器、版本和用户而异。

    这很有效,因为开发人员可以使用一个简单的批处理文件设置他们的环境,并在分支、项目等之间轻松切换,并且项目内的相对路径不会被破坏。

    【讨论】:

    • 看起来比符号链接和联结更容易 - 很好,谢谢。
    【解决方案3】:

    保罗蒂, 要求您尝试目录复制是不是很遥远?像 Dropbox/Synctoy 和其他将文件从选定位置复制到预期共享位置的工具?

    在您的情况下,我很想使用内置的环境变量。可能有办法让它工作,但在那之前我会寻求这样的解决方案。我还要记住,不同的用户编译到同一个目录,会与文件版本和文件锁(由其他用户使用)产生冲突。

    【讨论】:

    【解决方案4】:

    如果您不介意额外的副本,您可以添加构建后事件,将项目输出复制到共享 dll 的共同商定位置,并且每个人都使用对该位置的非相对引用。但是,它仍然需要对 那个 目标位置进行标准化,所以它可能不是您想要的。 (下面的示例至少允许驱动器号独立)

    复制 $(TargetPath) \dependencies

    【讨论】:

    • 构建后的事件让我一时感到害怕 - 对于初学者来说,习惯 C#、.NET、Visual Studio 和 SourceSafe 有足够的“乐趣”!不过还是谢谢。
    【解决方案5】:

    虽然我不太明白您的要求,但听起来符号链接目录会有所帮助 - 您可以将解决方案配置为输出到某个文件夹,该文件夹将符号链接到每个盒子上的任意位置。

    http://en.wikipedia.org/wiki/NTFS_symbolic_link

    ghost edit - mklink 在 7 中显然是新的,但旧版本仍然支持它(Russinovich 再次救援):

    http://technet.microsoft.com/en-us/sysinternals/bb896768

    【讨论】:

    • 这可能是一个选项 - 我从未在 XP 中尝试过,但在 W7 中已经尝试过,而且我们都应该在某个时候进入 W7 - ta。
    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多