2017-04-24 188 views
0

我在画布上显示图像。当使用绝对路径时,一切正常。但是,当我尝试使用相对路径时,我的代码运行但图像未加载。我需要使用相对路径,因为我们正在使用git处理组项目。包含我的图像的文件夹位于项目文件夹内。为什么我的绝对路径工作,但我的相对路径不是?

private void ShuffleCardsClick(object sender, RoutedEventArgs e) 
    { 
     computerDeck.ShuffleDeck(); 
     playerDeck.ShuffleDeck();    
     dealButton.IsEnabled = true; 

     BitmapImage bi = new BitmapImage(); 
     bi.BeginInit();    
     bi.UriSource = new Uri(@"card_images\cardback.png", UriKind.RelativeOrAbsolute); 

     bi.UriSource = new Uri(@"C:\Users\Windows\Documents\GitHub\NetEssentials_H1\ 
     Kaartspelen\KoetjeMelken\card_images\cardback.png"); 
     bi.EndInit(); 

     Image card = new Image(); 
     card.Source = bi; 
     card.Margin = new Thickness(0, 0, 0, 0); 
     card.Width = computerDeckCanvas.Width; 
     card.Height = computerDeckCanvas.Height; 
     computerDeckCanvas.Children.Add(card); 

    } 
+0

那么你的程序在'KoetjeMelken'中的可执行文件是? – NullDev

+0

这是正确的 – wetallday

回答

0

如果您正在使用MVC项目的工作,那么你可以使用Server.MapPath("your/path")这将创造一个相对路径为您服务。

更多信息:MSDN

也为类库我曾经使用过的前下工作一种享受:

var appDomain = System.AppDomain.CurrentDomain; 
var basePath = appDomain.RelativeSearchPath ?? appDomain.BaseDirectory; 
var path = Path.Combine(basePath, "EmailTemplates"); 
+0

它不会简单地生成我已经尝试使用的相同路径吗? – wetallday

+0

它会,但它会产生一个相对于你的工作目录的路径。请注意,据我所知,这只适用于MVC项目。 –

+0

请检查我的更新答案。 –

2

在.NET客户端应用程序的相对路径总是相对于你的工作目录。默认情况下,如果从Visual Studio中运行应用程序,则工作目录为bin \ Debug(或bin \ Release,如果以Release模式运行)。

因此,最快的修复方法是指定Visual Studio应将文件复制到目标文件夹。但是,如果用户想要使用不同的工作目录执行程序,这并不能解决您的问题。如果你想避免在这种情况下崩溃,你必须计算图像文件的绝对路径,例如以执行程序集的绝对路径为基础。

否则,您还可以将图片作为资源加入。

+0

我认为将他们添加为资源是一种可行的方式。我只是觉得我的代码没有按照我拥有的方式工作真的很奇怪。 – wetallday

相关问题