Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何为ASP.NET核心/角度web应用程序创建安装程序?

如何为ASP.NET核心/角度web应用程序创建安装程序?
EN

Stack Overflow用户
提问于 2020-08-14 13:31:55
回答 2查看 824关注 0票数 4

我们创建了一个“on”web应用程序,我的任务是为该应用程序创建一个安装程序,该应用程序将允许用户在SQLite或Server实现之间进行选择。我对如何做到这一点毫无头绪,也没有找到任何有明确方向的好文章。

我所做的就是在我的Startup.cs文件中编写以下代码,以便在appsettings.json文件中的两个连接字符串之间进行选择。有人知道创建/实现安装程序的最佳方法吗?对于这类事情有开源的解决方案吗?我觉得很迷茫.

代码语言:javascript
代码运行次数:0
复制
protected virtual IServiceCollection ConfigureDbContext(IServiceCollection services)
        {
            var isSqlServerConnection = Configuration.GetValue<bool>("UseSql");

            if (isSqlServerConnection)
            {
                services.AddDbContext<SecurityDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("Default")).UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll),
                ServiceLifetime.Transient);

                services.AddDbContext<StorageContext>(options =>
                options.UseSqlite(Configuration.GetConnectionString("Default")).UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking),
                ServiceLifetime.Transient);
            }
            else
            {
                services.AddDbContext<SecurityDbContext>(options =>
                options.UseSqlite(Configuration.GetConnectionString("Sqlite")).UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll),
                ServiceLifetime.Transient);

                services.AddDbContext<StorageContext>(options =>
                options.UseSqlite(Configuration.GetConnectionString("Sqlite")).UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking)
             , ServiceLifetime.Transient);
            }

            return services;
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-17 12:53:58

用Visual创建安装程序

  1. 关闭Visual的除一个实例之外的所有实例。
  2. 在运行实例中,访问菜单工具->扩展和更新。
  3. 在该对话框中,选择Online->>Tools->安装和部署。
  4. 从出现的列表中,选择MicrosoftVisualStudio2017安装程序项目。
  5. 安装完毕后,关闭并重新启动Visual。转到File->New并搜索word Installer。如果您看到一个如下所示的列表,您就会知道已经安装了正确的模板:

  1. 使用安装项目创建安装程序来满足您的需求。您可以轻松地在安装程序上创建一个页面,其中用户选择SQLite或Server作为支持的数据。

下面是一些关于创建安装程序和您需要的扩展的额外资源。根据Visual的版本,您可能需要其他版本的扩展。

https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2017InstallerProjects

https://codeteddy.com/2016/04/04/creating-an-msi-package-for-c-windows-application-using-a-visual-studio-setup-project/

https://www.add-in-express.com/docs/net-msi-setup-project.php

票数 2
EN

Stack Overflow用户

发布于 2020-08-23 08:22:48

您也可以使用"Inno设置“来创建安装程序。这里有大量的示例代码。基本上你需要做几件事。

准备:创建您自己的工具将信息写入您的appSettings.json。exe应该接受参数作为参数,并根据这些参数生成一个appSetting.json文件。

  1. 在inno安装文件部分,设置构建工件的路径和您自己的json生成工具。

//样本代码

代码语言:javascript
代码运行次数:0
复制
[Files]
    Source: bin\*; DestDir: {app}\bin; Flags: recursesubdirs uninsneveruninstall; Components: Main
    Source: Utilities\AppSettingGenerator.exe; DestDir: {app}\Utilities\AppSettingGenerator.exe; Components: " Main"; Tasks: ; Flags: uninsneveruninstall; 
  1. 创建一个屏幕,让用户选择数据库引擎、sqllite或Sql server。
  2. 创建另一个屏幕来设置连接字符串。

//样本代码。创建安装程序屏幕。

代码语言:javascript
代码运行次数:0
复制
procedure FormCreatePage(PreviousPageId: Integer);
begin
    pgeInstallType := CreateInputOptionPage(    wpWelcome,
                                                'Select Installation Type',
                                                'Which type of installation do you want to run?',
                                                'Select the type of installation that you would like to run. Click Next when you are ready to continue.',
                                                true,
                                                false
                                             );

    pgeInstallType.Add('Sqllite');
    pgeInstallType.Add('Sql Server');

    pgeInstallType.Values[0] := true;

    
    pgeInput1 := CreateCustomPage(  PreviousPageId,
                                    'Configure Sql Server Connection',
                                    'Please verify the details for those sections highlighted in red before continuing.'
                                 );

    pgeInput2 := CreateCustomPage(  pgeInput1.ID,
                                    'Configure Sql lite Connection',
                                    'Please verify the details for those sections highlighted in red before continuing.'
                                 );
end;

//样本代码。创建UI控件以允许Server连接中的用户键

代码语言:javascript
代码运行次数:0
复制
pnlSQL := TPanel.Create(pgeInput1);
    with pnlSQL do
        begin
            Parent := pgeInput1.Surface;
            Left := ScaleX(0);
            Top := ScaleY(30);
            Width := ScaleX(413);
            Height := ScaleY(125);
            BevelInner := bvLowered;
        end;

    { lblPnlSQL }
    lblPnlSQL := TLabel.Create(pgeInput1);
    with lblPnlSQL do
        begin
            Parent := pnlSQL;
            Left := ScaleX(340);
            Top := ScaleY(5);
            Width := ScaleX(70);
            Height := ScaleY(13);
            AutoSize := False;
            Caption := 'SQL Server';
            Font.Height := ScaleY(-11);
            Font.Style := [fsBold, fsItalic];
        end;

    { lblSrvName }
    lblSrvName := TLabel.Create(pgeInput1);
    with lblSrvName do
        begin
            Parent := pnlSQL;
            Left := ScaleX(5);
            Top := ScaleY(5);
            Width := ScaleX(66);
            Height := ScaleY(13);
            Caption := 'Server Name:';
            Font.Height := ScaleY(-11);
        end;

    { lblUserID }
    lblUserID := TLabel.Create(pgeInput1);
    with lblUserID do
        begin
            Parent := pnlSQL;
            Left := ScaleX(5);
            Top := ScaleY(25);
            Width := ScaleX(40);
            Height := ScaleY(13);
            Caption := 'User ID:';
            Font.Height := ScaleY(-11);
        end;

    { lblPassword }
    lblPassword := TLabel.Create(pgeInput1);
    with lblPassword do
        begin
            Parent := pnlSQL;
            Left := ScaleX(5);
            Top := ScaleY(46);
            Width := ScaleX(50);
            Height := ScaleY(13);
            Caption := 'Password:';
            Font.Height := ScaleY(-11);
        end;

    { lblDBName }
    lblDBName := TLabel.Create(pgeInput1);
    with lblDBName do
        begin
            Parent := pnlSQL;
            Left := ScaleX(5);
            Top := ScaleY(67);
            Width := ScaleX(80);
            Height := ScaleY(13);
            Caption := 'Database Name:';
            Font.Height := ScaleY(-11);
        end;
  1. 在安装程序屏幕上输入参数后,调用appsettingGenerator工具。

//样本代码。在nextbuttonClick调用它并检查当前页面是否正确

代码语言:javascript
代码运行次数:0
复制
function NextButtonClick(CurPageID: Integer): Boolean; 
var     i: Integer; 
begin 
  if CurPageID = pgeInput2.ID then      
  begin                                 
    RunExe(gUtilAppsettingGenerator,' -dbuid "' + txtUserID.Text + '"
     -dbpass "' + txtPassword.Text + '" -c "server=' + txtSrvName.Text + ';database='    + txtDBName.Text + '" -dbinst "' + txtDSN.Text + '"', ewWaitUntilTerminated, true); 

end;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63420257

复制
相关文章
js与jQuery的区别以及jQuery选择器和方法的使用
jQuery是什么:jQuery是JavaScript的类库,封装了很多js代码。类似java中的类库一样里面一个类中有很多别人写好的功能。90%以上的公司都在用jQuery。
天蝎座的程序媛
2022/11/18
15.4K0
js与jQuery的区别以及jQuery选择器和方法的使用
JQuery的简述、使用方法和选择器
JQ简述1 1、 jQuery出现的背景(Javascript遇到的问题) 选择器功能弱 DOM操作繁琐之极 浏览器兼容性不好 动画效果弱 2、什么是 jQuery(概念) jQuery (javaScriptQuery)JavaScript 代码库 官方网站:http://jquery.com/ 3、目前 jQuery 有三个大版本: 1.x:兼容ie678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016
时间静止不是简史
2020/07/24
1.2K0
JQuery的简述、使用方法和选择器
jQuery 选择器使用方法
下面的代码,只有外层段落的字体会改变颜色,里层不会,因为里层是属于 divInner 的直系元素
Remember_Ray
2020/03/09
4.6K0
jQuery选择器和选取方法
我们已经使用了带有简单Css选择器的jQuery选取函数:$()。现在是时候深入了解jQuery选择器语法,以及一些提取和扩充选中元素集的方法了。
Yiiven
2022/12/15
5.2K0
jQuery 选择器使用方法
下面的代码,只有外层段落的字体会改变颜色,里层不会,因为里层是属于 divInner 的直系元素
Remember_Ray
2020/03/08
4.7K0
验证量子芯片计算是否正确的方法
在向实际量子计算迈进的过程中,来自麻省理工学院、谷歌和其他地方的研究人员设计了一个系统,可以验证何时量子芯片能够准确地完成经典计算机无法完成的复杂计算。
AiTechYun
2020/02/23
8800
jquery的基本选择器
关于基本选择器包括 “*” ,“.class”,"element","#id","selector1 selementN" "*" 选择器,可以找到文档中的所有的元素,包括 head body $(function(){ // $("#test").find("*").css("border","3px solid red"); //找到 #test 这个元素下面的所有的 元素 //}); ".class" 选择给定样式类名的所有的元素。 //$(function
用户1197315
2018/01/19
6320
jQuery常用的选择器
当我们想要操所页面中的元素时,首先要做的就是选取元素。选取页面中元素可以使用jQuery给我们提供的$()方法,该方法需要提供选择器作为参数,方法执行完成后会返回给我们一个jQuery对象,被选取的元素就包含在该对象中。
小周sir
2019/09/23
7350
锋利的JQuery —— 选择器
图片猛戳链接
用户1154259
2018/01/17
7140
锋利的JQuery —— 选择器
什么是学习编程的正确方法
对程序员、开发人员和数据科学家的高度需求吸引了许多人加入 IT 领域。通常,初学者总要试图在学习过程中找到捷径,以便更快地谋得一份工作。
老齐
2021/09/15
1.2K0
jquery选择器用法_jQuery属性选择器
一、 基本选择器 1. ID选择器 ID选择器#id就是利用DOM元素的id属性值来筛选匹配的元素,并以iQuery包装集的形式返回给对象。 使用公式:(“#id”) 示例:(“#box”) //获取id属性值为box的元素 2. 元素选择器 元素选择器是根据元素名称匹配相应的元素。元素选择器指向的是DOM元素的标记名,也就是说元素选择器是根据元素的标记名选择的。 使用公式:(“element”) 示例:(“div”) //获取所有div元素 3.类名选择器 类选择器是通过元素拥有的CSS类的名称查找匹配的DOM元素。在一个页面中,一个元素可以有多个CSS类,一个CSS类又可以匹配多个元素,如果有元素中有一个匹配类的名称就可以被类选择器选取到。简单地说类名选择器就是以元素具有的CSS类名称查找匹配的元素。 使用公式:(“.class”) 示例:(“.box”) //获取class属性值为box的所有元素 4.复合选择器 复合选择器将多个选择器(可以是ID选择器、元素选择器或是类名选择器)组合在一起,两个选择器之间以逗号”,”分隔,只要符合其中的任何一个筛选条件就会被匹配,返回的是一个集合形式的jQuery包装集,利用jQuery索引器可以取得集合中的jQuery对象。 注意:多种匹配条件的选择器并不是匹配同时满足这几个选择器的匹配条件的元素,而是将每个匹配的元素合并后一起返回。 使用公式:(“selector1,selector2,……,selectorN”) selector1:一个有效的选择器,可以是ID选择器、元素选择器或类名选择器等 selector2:另一个有效的选择器,可以是ID选择器、元素选择器或类名选择器等 selectorN:(可选择)任意多个选择器,可以是ID选择器、元素选择器或类名选择器等 示例:(“div,#btn”) //要查询文档中的全部的<div>元素和id属性为btn的元素 5.通配符选择器
全栈程序员站长
2022/11/16
12.2K0
不懂JQuery的孩子:自封装Ajax函数
前言                                       一直没痛下决心学习JQuery,但平时项目中又要用到Ajax,于是自己写一个函数封装一下方便项目中偷懒吧!今天一不小心看到介绍xmlHttp对象的博客,细读一下重新认识了一下xmlHttp对象,获益良多,顺便重构一下自己写的Ajax函数。   主要参考:轻松掌握XMLHttpRequest对象 XMLHTTP.readyState的五种状态 认识XmlHttp对象                            
^_^肥仔John
2018/01/18
1.4K0
不懂JQuery的孩子:自封装Ajax函数
jquery当中$选择器的用法
1.$选择器 例 1.1(ElementApi.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> $选择器 </TITLE> <script src="jquery.js"></script> <SCRIPT LANGUAGE="JavaScript"> <!-- function showHide() { /* toggle() 切换元素的可见状态。 */     $("#info").toggle(); } //--> </SCRIPT> </HEAD>
马克java社区
2021/01/30
5030
jquery当中$选择器的用法
jQuery判断checkbox是否选中的3种方法
网上大多数文章都提供的方法都是无效的,害死个人,本文中的方法小编亲测试有效,建议使用方法一、二: 方法一(建议): if ($("#checkbox-id").get(0).checked) { // do something } 感谢豆瓣绿补充: if ($("#checkbox-id")[0].checked) { // do something } 方法二(建议): if($('#checkbox-id').is(':checked')) { // do something
deepcc
2018/05/16
1.5K0
jQuery常用的 基本选择器
jQuery选择器是jQuery为我们提供的一组方法,让我们更加方便的获取到页面中的元素。注意:jQuery选择器返回的是jQuery对象。
兮动人
2021/06/11
5230
【方法】学习 SAS 的正确姿势是怎样的?
作者 CDA 数据分析师 SAS 作为世界知名大数据分析产品,只要是大机构, 不论是、制药、金融、保险、市场部门、NGO 还是政府部门,SAS 的覆盖率,都是完全不可被替代的。甚至部分IT公司在统计
CDA数据分析师
2018/02/26
2.2K0
【方法】学习 SAS 的正确姿势是怎样的?
jQuery选择器
说明: 可以使用length属性来判断标签是否选择成功, 如果length大于0表示选择成功,否则选择失败。
落雨
2022/03/01
30.4K0
jQuery 选择器
基本选择器 基本选择器是最简单的选择器,可以通过元素id、class和标签名等来直接查找DOM元素。 元素选择器 根据给定元素名匹配元素。如下选择的是所有div元素。 $("div").css("
静默虚空
2018/01/05
7.4K0
JQuery选择器
1    $("*")      ---------选取所有元素 2   $(this)     --------选择当前HTML元素 3   $("p.a")   -----选取p元素下class为a的元素 4   $("p:first")  ----选取第一个p元素 5   $("ul li:first-child") ----选取ul下第一个li元素 6  $("tr:even")  -------选取偶数位置下的tr 7 $("tr :odd")   --------选取奇数位置的tr
用户3159471
2018/09/13
1.7K0
JQuery选择器
jQuery常用的事件: load:当文档加载时运行脚本 blur:当窗口失去焦点时运行脚本 focus:当窗口获得焦点时运行脚本 change:当元素改变时运行脚本 submit:当提交表单时运行脚本 keydown:当按下按键时运行脚本 keypress:当按下并松开按键时运行脚本 keyup:当松开按键时运行脚本 click:当单击鼠标时运行脚本 dblclick:当双击鼠标时运行脚本 mousedown:当按下鼠标按钮时运行脚本 mousemove:当鼠标指针移动时运行脚本 mouseout:当鼠标指针移出元素时运行脚本 mouseover:当鼠标指针移至元素之上时运行脚本 mouseup:当松开鼠标按钮时运行脚本 abort:当发生中止事件时运行脚本
我不是费圆
2020/09/21
7.4K0

相似问题

jQuery选择器-孩子的孩子

40

jquery:孩子() vs孩子选择器">“

30

jQuery大孩子的选择器

23

“开始”节点没有在正确的顺序中找到

13

在叉子的过程中,孩子的执行到底是从哪里开始的?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档