iT邦幫忙

0

[已解決]C# MVC NET6 IIS發佈後問題 //額外問一下IIS路徑的部分問題

  • 分享至 

  • xImage

**額外問一下IIS的部份的路徑問題是怎判斷
網路上都寫|DataDirectory|\database.db 然後用絕對路徑也不能

之後路徑的部分猜了一下
"DefaultConnection": "Data Source=./database.db;"
用相對路徑就可以了**

昨天測試後有出現這個錯誤
Microsoft.EntityFrameworkCore.Database.Connection[20004] An error occurred using the connection to database 'main' on server '|DataDirectory|\database.db'.

然後改成絕對路徑
DefaultConnection": "Data Source=d:\www\InProPlayerWeb\InProPlayerWeb\bin\Release\net6.0\publish\database.db"
這樣IIS上也不行 所以我現在也不確定 路徑的部分要怎修改
找到的都是用|DataDirectory|\database.db 這種的方式

目前本機上內網內測試

原本發佈後用內網IP可以連線跟使用
後來在增加了SQLite後發佈 IIS
本機VS編譯正常 用IP連線後 就跳出 error500 伺服器錯誤
想問一下是SQLite 發佈後IIS 有其他需要設定跟安裝的嗎

Nuget Microsoft.EntityFrameworkCore.Sqlite 7.0.5版

program.cs

builder.Services.AddDbContext<ApplicationDbContext>(option => option.UseSqlite(
    builder.Configuration.GetConnectionString("DefaultConnection")));

ApplicationDbContext.cs

using Microsoft.EntityFrameworkCore;
using InProPlayerWeb.Models;
using Microsoft.Extensions.Configuration;

namespace InProPlayerWeb.Helper
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> option) : base(option)
        {

        }

        public DbSet<Configuration> Configuration { get; set; }
    }
}

appsetting.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=database.db"
  }
}

Controller.cs 註解的部分開啟 IIS就會500

public class HomeController : Controller
{
    //private readonly ApplicationDbContext _context;
    private readonly PortHelper _portHelper;

    private readonly int areaCount = 20;
    private readonly int groupCount = 6;        
    private bool[] ZoneStatus = Enumerable.Repeat(false, 20).ToArray();

    public HomeController(PortHelper portHelper)
    //public HomeController(PortHelper portHelper, ApplicationDbContext context)
    {
        _portHelper = portHelper;
        //_context = context;

        //var configDB = _context.Configuration.ToList();
        //_portHelper.PortName = configDB[0].PortName;
        //_portHelper.BaudRate = configDB[0].BaudRate;
    }
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
科科
iT邦好手 8 級 ‧ 2023-05-23 17:47:28

本機編譯正常,那有run起來看是不是也正常嗎?
SQLite可以在本機上運行,在本機debug看看?

看更多先前的回應...收起先前的回應...
柯柯 iT邦新手 2 級 ‧ 2023-05-24 08:23:42 檢舉

昨天測試後有出現這個錯誤
Microsoft.EntityFrameworkCore.Database.Connection[20004] An error occurred using the connection to database 'main' on server '|DataDirectory|\database.db'.

然後改成絕對路徑
DefaultConnection": "Data Source=d:\www\InProPlayerWeb\InProPlayerWeb\bin\Release\net6.0\publish\database.db"
這樣IIS上也不行 所以我現在也不確定 路徑的部分要怎修改 找到的都是用|DataDirectory|\database.db 這種的方式

科科 iT邦好手 8 級 ‧ 2023-05-24 09:16:53 檢舉

我個人路徑是這樣寫: "Data Source=Data/database.db"
要確認專案路徑底下,是否有產生 Data 資料夾

柯柯 iT邦新手 2 級 ‧ 2023-05-24 10:21:49 檢舉

我是放在底層 所以我本機是這樣寫
"Data Source=database.db"
IIS的部分 參考網路文章

"Data Source=|DataDirectory|\\database.db"
"Data Source=d:\\www\\InProPlayerWeb\\InProPlayerWeb\\bin\\Release\\net6.0\\publish\\database.db"

後來剛剛自己猜了一下用相對路徑 就正常了
"Data Source=./database.db"
因為第一次用IIS所以也不確定他的路徑部分是怎調整

科科 iT邦好手 8 級 ‧ 2023-05-24 11:03:17 檢舉

恭喜有解決~

我要發表回答

立即登入回答