我们最近将SQLite
添加到C# WebForms
上运行的现有IIS
应用中,我们现在无法从Visual Studio
或{{}发布该应用{1}}。
如果我们尝试在用户访问后再访问Team City
的路由后发布,则会收到以下错误:
无法添加' bin / x86 / SQLite.Interop.dll'到网站。无法添加文件' bin \ x86 \ SQLite.Interop.dll'。该进程无法访问该文件,因为它正由另一个进程使用。
为了尽量减少问题范围,我执行了以下步骤:
SQLite DB
C# Web API project.
System.Data.SQLite.Core NuGet package.
命令IISExpress
iisexpress /path:c:\path-to-application /port:8081
,该http://localhost:8081/api/values
使用相关SQLite table
如果我们再次尝试发布,则会收到上述错误,这与我们在IIS
下的生产中看到的问题相呼应。
为了成功部署到生产站点,我们必须停止app pool
,发布然后重新启动app pool
。
这远非理想。关于我们如何解决这个问题的任何想法?
这是代码......
public IEnumerable<string> Get()
{
var dbPath = HttpContext.Current.Server.MapPath("~/MyDB.sqlite");
using (var conn = new SQLiteConnection(string.Format("Data Source={0};Version=3;", dbPath)))
{
var rows = new List<string>();
conn.Open();
var sql = "select * from myTable";
using (var command = new SQLiteCommand(sql, conn))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
rows.Add(reader["mycolumn"].ToString());
}
}
}
return rows;
}
}
答案 0 :(得分:1)
您必须在部署期间停止该网站。您应该已经完成无论如何,与DLL锁定无关,因为在部署期间处理的请求将产生混合旧代码和新代码的不可预测的结果。