在Visual Studio 2015中访问Resouce图像 - 特别是位置路径

时间:2017-12-20 18:30:17

标签: c# excel visual-studio-2015

我在Visual Studio 2015中使用Visual Studio Tools For Office(VSTO)创建Excel插件项目。我必须添加/包含公司徽标 - 一个.png文件到此插件。我将徽标图像文件添加到Visual Studio资源中。我尝试使用VS资源中的图像来包含在插件中 - 这不起作用

var myLogo = Properties.Resources.CompanyLogo;
myWorkSheet.Shapes.AddPicture(myLogo, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 10, 20, 250, 40);

我收到一条错误消息,指出myLogo需要采用字符串格式 - 就像文件路径格式一样。所以我尝试了下面哪个确实有效 - 但是......这似乎有点笨拙。我必须包括使用System.IO,....

var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
string myLogo = outPutDirectory.Substring(6, outPutDirectory.Length - 6) + @"\CompanyLogo.png";    

myWorkSheet.Shapes.AddPicture(myLogo, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 10, 20, 250, 40);

我还将CompanyLogo.png文件包含到我的addin项目的根文件夹中,并且每次编译项目时都将其设置为复制到输出目录。所以,这里的第二个例程 DOES 工作,但我想我应该/想要使用项目资源部分中的文件。如何从Project.Resources中检索Companylogo.png资源的文件路径?

如果这不可能 - 拥有/使用Visual Studio的Resources属性有什么意义?我只是觉得我在某处遗漏了某些东西。

1 个答案:

答案 0 :(得分:0)

好的,所以我在上面的方法中遇到的问题是它有点静态。好吧,我终于想出了如何使用Resource属性来减少静态:

Image img = Properties.Resources.CompanyLogo;
var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
img.Save(outPutDirectory + @"\CompanyLogo.png", ImageFormat.Png);
myWorkSheet.Shapes.AddPicture(outPutDirectory + @"\CompanyLogo.png", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, 0, 0, 260, 50);

现在我可以在执行程序集的任何地方保存png,而不是硬编码某个路径。

但我还有另一个问题是关于资源文件构建操作 - 有无选项,永远不会复制,总是复制,嵌入资源,资源,.... 我尝试了这些看起来没有任何区别的选项(我每次都先从目标位置删除png)。我将构建操作作为资源留给了#34;以防万一"。我愿意接受有关构建操作类型的建议。