C# 文件路径可以是';无法从共享库中找到

C# 文件路径可以是';无法从共享库中找到,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个应用程序,用户可以查看附在样本上的图像,然后他们需要能够通过电子邮件将该样本的详细信息(包括图像附件)发送给利益相关者 在web应用程序的my web.config中,我有: <add key="ImagesPath" value="~/Images" /> 调试时 找不到文件“C:\Program Files(x86)\IIS Express\~\Images\3000\1\1\3.png” 发布后 找不到路径“C:\Windows\SysWOW64\inetsrv\~\

我有一个应用程序,用户可以查看附在样本上的图像,然后他们需要能够通过电子邮件将该样本的详细信息(包括图像附件)发送给利益相关者

在web应用程序的my web.config中,我有:

<add key="ImagesPath" value="~/Images" />
调试时

找不到文件“C:\Program Files(x86)\IIS Express\~\Images\3000\1\1\3.png”

发布后

找不到路径“C:\Windows\SysWOW64\inetsrv\~\Images\9251\1\1.JPG”的一部分

我尝试的

一,

在创建附件之前,我尝试调用此函数

var appDomain = System.AppDomain.CurrentDomain;
var basePath = appDomain.RelativeSearchPath ?? appDomain.BaseDirectory;
var p = Path.Combine(basePath, item);
message.Attachments.Add(new Attachment(p));
但应用程序仍然找不到这些文件

  • 我试着打电话

    System.Web.HttpContext.Current.Server.MapPath(item);
    
    message.Attachments.Add(new Attachment(item));
    
  • 在创建每个附件之前,仍然无法找到H图像


    有人能帮我解决这个问题吗。

    从您发布的代码来看,您似乎调用了
    System.Web.HttpContext.Current.Server.MapPath(item)
    
    Server.MapPath
    返回文件的物理位置。使用调用该方法的结果添加附件

    这应该行得通

    var item = "3000/1/1/3.png";
    var fileLocation = Path.Combine("images/",item);
    var fullPath = System.Web.HttpContext.Current.Server.MapPath(fileLocation);
    message.Attachments.Add(new Attachment(fullPath));
    
    有时,我倾向于在实际尝试访问文件之前进行文件存在性检查

    if (File.Exists(fullPath ))
    {
        message.Attachments.Add(new Attachment(fullPath));
    }
    
    如果您是从MVC控制器使用它,您可以使用
    Url.Content
    Server.MapPath

    var p = Server.MapPath(Url.Content("~/images/3000/1/1/3.png"));
    

    从您发布的代码中,您似乎调用了
    System.Web.HttpContext.Current.Server.MapPath(item)
    
    Server.MapPath
    返回文件的物理位置。使用调用该方法的结果添加附件

    这应该行得通

    var item = "3000/1/1/3.png";
    var fileLocation = Path.Combine("images/",item);
    var fullPath = System.Web.HttpContext.Current.Server.MapPath(fileLocation);
    message.Attachments.Add(new Attachment(fullPath));
    
    有时,我倾向于在实际尝试访问文件之前进行文件存在性检查

    if (File.Exists(fullPath ))
    {
        message.Attachments.Add(new Attachment(fullPath));
    }
    
    如果您是从MVC控制器使用它,您可以使用
    Url.Content
    Server.MapPath

    var p = Server.MapPath(Url.Content("~/images/3000/1/1/3.png"));
    

    您是否尝试了
    message.Attachments.Add(新附件(System.Web.HttpContext.Current.Server.MapPath(项))?项目中的值是多少?@Shyju我刚刚测试了你的建议,似乎效果不错谢谢<代码>项
    只是文件的路径。如果您想添加答案,我将接受您是否尝试了
    message.Attachments.add(新附件(System.Web.HttpContext.Current.Server.MapPath(item))?项目中的值是多少?@Shyju我刚刚测试了你的建议,似乎效果不错谢谢<代码>项
    只是文件的路径。如果你想补充一个答案,我会接受的