Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何使用ClickOnce部署访问本地MDF数据库文件的WPF应用程序?_Visual Studio_Deployment_Clickonce_Publish - Fatal编程技术网

Visual studio 如何使用ClickOnce部署访问本地MDF数据库文件的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 它安装得很好,在“开始”菜单中,但当它运行时,会出现以下错误: 我已在项目/属性/安全性中

我在Visual Studio中制作了一个简单的WPF应用程序

它使用以下连接字符串访问自己目录中自己的数据库文件:

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的阴影,您必须使用代码库。我认为位置将适用于常规应用程序。)

机器人网络