将文件从数据库项目添加到MSI

时间:2019-05-29 08:16:31

标签: c# wix

我有一个数据库项目,其中包含自定义SQL脚本,我需要将这些脚本添加到MSI文件夹中,以便我的自定义操作可以选择并执行它们。

出现以下错误

HeatGeneratedFileList.wxs(6,0):错误LGHT0103:系统找不到文件'SourceDir \ TestScript-Copy.sql'。

HeatGeneratedFileList.wxs(9,0):错误LGHT0103:系统找不到文件'SourceDir \ TestScript.sql'。

我已经创建了使用热量完成的动作:

 <Target Name="BeforeBuild">
    <HeatDirectory Directory="../Database/DatabaseFiles/" OutputFile="HeatGeneratedFileList.wxs" ComponentGroupName="Database.Installer" DirectoryRefId="INSTALLFOLDER" AutogenerateGuids="true" ToolPath="$(WixToolPath)" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" SuppressCom="true" />
  </Target>

这是HeatGeneratedFileList.wxs文件

 <?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="INSTALLFOLDER">
            <Component Id="cmp35BC97AC12F21A6F6154759C2D9B5430" Guid="*">
                <File Id="filDEDB241BDDF1A0CD0B001190398F5F5F" KeyPath="yes" Source="SourceDir\TestScript - Copy.sql" />
            </Component>
            <Component Id="cmp221D9003B2C58612888DBC0D1CEBC730" Guid="*">
                <File Id="filF6EA2F11A51AF10E1517FFB9152307EE" KeyPath="yes" Source="SourceDir\TestScript.sql" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="AgentX.Database.Installer">
            <ComponentRef Id="cmp35BC97AC12F21A6F6154759C2D9B5430" />
            <ComponentRef Id="cmp221D9003B2C58612888DBC0D1CEBC730" />
        </ComponentGroup>
    </Fragment>
</Wix>

我想从我的自定义操作中运行以下代码以执行两个脚本:

 private static bool ProcessSQLFile(Session session, string script)
        {
            var success = true;
            try
            {
                var connectionStringBuilder = BuildConnectionString(session);

                var scriptToRun = File.ReadAllText(script);

                var connectionString = new SqlConnection(connectionStringBuilder.ConnectionString);

                var server = new Server(new ServerConnection(connectionString));

                server.ConnectionContext.ExecuteNonQuery(scriptToRun);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                success = false;
            }

            return success;
        }

1 个答案:

答案 0 :(得分:1)

我在csproj文件中错过了以下内容:

<ItemGroup>
      <LinkerBindInputPaths Include="%(ProjectReference.RootDir)%(ProjectReference.Directory)bin\$(Configuration)\DatabaseFiles\" />
    </ItemGroup>
相关问题