Visual studio 如何使用ClickOnce部署访问本地MDF数据库文件的WPF应用程序?
我在Visual Studio中制作了一个简单的WPF应用程序 它使用以下连接字符串访问自己目录中自己的数据库文件:Visual studio 如何使用ClickOnce部署访问本地MDF数据库文件的WPF应用程序?,visual-studio,deployment,clickonce,publish,Visual Studio,Deployment,Clickonce,Publish,我在Visual Studio中制作了一个简单的WPF应用程序 它使用以下连接字符串访问自己目录中自己的数据库文件: System.Environment.CurrentDirectory + @"\Data\" + databaseFileName; 我点击了发布,基本上接受了所有的默认设置(CD/DVD发布,没有在线更新) 我将安装文件夹复制到另一台计算机上 在新电脑上,我双击了setup.exe 它安装得很好,在“开始”菜单中,但当它运行时,会出现以下错误: 我已在项目/属性/安全性中
System.Environment.CurrentDirectory + @"\Data\" + databaseFileName;
我点击了发布,基本上接受了所有的默认设置(CD/DVD发布,没有在线更新)
我将安装文件夹复制到另一台计算机上
在新电脑上,我双击了setup.exe
它安装得很好,在“开始”菜单中,但当它运行时,会出现以下错误:
我已在项目/属性/安全性中为应用程序授予了所有的权限:
我必须做哪些更改,以便使用ClickOnce部署的此应用程序可以在.exe文件下的相对目录中找到其数据库,即“Data/MainData.mdf”?
附录
下面答案中的修复程序适用于Windows 7,但在Windows XP上,我得到以下结果:
首先,您将其作为数据进行部署,您的连接字符串显示了这一点。DataDirectory转换为ClickOnce缓存下的数据文件夹,如果您将文件标记为数据,ClickOnce将在此处放置文件 如果不希望在此处部署它,但希望它相对于[exe],请进入“发布”选项卡中的“应用程序文件”对话框,将其从“包含(数据)”更改为“仅包含”。然后它将把它放在相对于exe位置的位置。(即,如果您的项目中有一个文件夹,它会将其放在部署的exe下的相应文件夹中)。别忘了更改连接字符串 如果您将其部署在该位置,则在发布更新时它将丢失。(让你知道)。以下是您可以将数据放在何处以避免此问题的想法: 您需要动态创建连接字符串Path.Combine(System.Windows.Forms.Application.StartupPath,“Data\mydatabase.mdf”);或者,它将从当前程序集的默认路径(.NET)开始 --加成-- 啊,WPF,对不起,错过了。您基本上需要获取运行exe的文件夹。看看这是否有帮助: 在System.Reflection命名空间中:
Assembly assemblyInfo = Assembly.GetExecutingAssembly();
if (assemblyInfo != null)
{
//try Path.GetDirectoryName(assemblyInfo.Location)
//if that doesn't work, try assemblyInfo.CodeBase
}
(在VSTO应用程序中,由于dll的阴影,您必须使用代码库。我认为位置将适用于常规应用程序。)
机器人网络