【问题标题】:How to (properly) use this VisualStudio global variable?如何(正确)使用这个 VisualStudio 全局变量?
【发布时间】:2014-05-02 18:50:37
【问题描述】:

我导出了一个依赖于一些本地图像的项目模板,我想手动加载它们,因为如果我不加载它们会出现异常。

我正在尝试在Form.Designer.vb 中使用全局变量$(ProjectDir),但似乎无法识别,我做错了什么?

Me.PictureBox1.Image = Image.FromFile("$(ProjectDir)\Resources\Clipboard.png")

当我加载项目模板时,上面的字符串被读取为文字字符串。

PS:我也不知道全局变量是否会指向我正在加载我的项目模板的解决方案的路径,或者会指向我导出我的项目模板的路径......当然我需要第二件事。

请注意,我已经用 C# 标记了这个问题,因为全局变量的用法应该是相同的......

【问题讨论】:

  • 您是否只阅读了您提供的文章链接的标题?
  • @Hamlet Hakobyan 我认为这些变量也可以以这种方式使用,因为例如 $(rootnamespace) 全局变量在链接中,并且 $rootnamespace$ 变量在每个文件......看起来都一样,如果不是那么我错了,这就是我寻求帮助的原因。
  • 考虑将标题/标签编辑为“我可以在 C# 代码中使用 MSBuild 变量吗”...请注意,您的示例显示的内容与许多“如何从 C# 中的资源文件夹加载文件”重复.

标签: c# vb.net winforms visual-studio-2010 visual-studio


【解决方案1】:

可能是您没有正确解决问题。首先$(ProjectDir) 是Visual Studio IDE 用于获取项目当前路径的宏。如果你想通过代码得到它,那么你可以这样做:

string filePath = Path.Combine(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.FullName, 
                               "Resources\\Clipboard.png");

但更重要的是您将它们放在资源中。为什么不使用 WinForm 资源呢。您可以将图像添加到资源中,这些资源将在构建中可用,您可以通过以下代码访问它们:

PictureBox1.Image = Properties.Resources.Clipboard.png;

见:How to add images as resources to C# Windows Application

【讨论】:

  • +0: CurrentDirectory 可能是个坏主意 - $(ProjectDir) 接近 ExecutingAssembly...
  • @Habb 感谢您的帮助,但您提到的有关资源的事情不确定,您可以在这里看到我的主要问题:stackoverflow.com/questions/23431702/… ,当导出为项目模板时,资源不是导出然后我手动复制了项目模板根目录中的“资源”文件夹,现在我搞砸了,以便能够获取加载模板的根目录来加载图像......但没办法,那里对我来说没办法。
  • 另外,当我在 File.designer.vb 中使用 'CurrentDirectory' 方法时,它指向我安装 VS IDE (devenv.exe) 的目录,我也尝试过反射但没有运气。
  • 无论如何,关于宏的使用的问题已经解决了,谢谢
  • @AlexeiLevenkov,可能是AppDomain.CurrentDomain.BaseDirectory; 是正确的吗?
【解决方案2】:

您使用的变量不适用于代码,仅用于 Visual Studio 中的宏(如预构建事件)。

有关获取项目目录的信息,请参阅此问题: How to get Current Project Directory path using C#

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2015-01-20
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多