www.91084.com

GVKun编程网logo

Visual Studio中Debug与Release以及x86、x64、Any CPU的区别

17

在这篇文章中,我们将带领您了解VisualStudio中Debug与Release以及x86、x64、AnyCPU的区别的全貌,同时,我们还将为您介绍有关.Net编译环境x86,x64,anycpu的

在这篇文章中,我们将带领您了解Visual Studio中Debug与Release以及x86、x64、Any CPU的区别的全貌,同时,我们还将为您介绍有关.Net编译环境x86,x64,anycpu的区别、andriod studio debug 带签名的release apk、asp.net – Visual Studio中Web API和Azure API APP之间的区别、Blend Visual studio 和Visual studio 的区别的知识,以帮助您更好地理解这个主题。

本文目录一览:

Visual Studio中Debug与Release以及x86、x64、Any CPU的区别

Visual Studio中Debug与Release以及x86、x64、Any CPU的区别

Visual Studio中Debug与Release的区别:

      在Visual Studio中,编译模式有2种:Debug与Release。这也是默认的两种方式,在新建一个project的时候,就已经存在这两种模式供选择。

      Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
      Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

SO:
      一般都是用Release来打包发布程序,因为Release做了更多的优化,运行速度更快,适合在项目完成后部署,另外,Release打包出来的程序文件也相对来说会小一些。而Debug模式更适合在开发调试的时候使用。即:开发调试的时候使用Debug模式,打包发布程序用Release模式。

 

 

Visual Studio中x86、x64、Any CPU的区别:

1、简单的说,它们之间最直接的区别就是:x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,若操作系统是64位的,编译出来的就是64位程序。

2、若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集…或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。
反之,若主程序是由x64平台编译出来的,而dll是x86的呢?答案。。也是不行的!
说到这里,基本上可以确定一点:dll和主程序的生成平台只要一致就可以
那么问题来了!若主程序是Any CPU编译的,而dll是由x86或者x64平台编译的,又或者,主程序是x86或者x64平台编译的,而dll是由Any CPU编译的呢?正确答案就是两者在“特殊情况”下都是可行的。为什么说是“特殊情况”下呢?因为第一点也提到了,Any CPU取决于操作系统,而结合第二点提到的只要dll和主程序的生成平台一致,那么也是可行的。所以,由上可知:若主程序是在Any CPU平台下编译的,那么编译dll的平台必须要和编译主程序的操作系统一致才行。若主程序是在x86或者x64平台下编译的,那么dll就必须要和主程序一致。不过有个特例:若dll由Any CPU编译的,那么这个dll就可以被32位和64位的主程序调用。这是为什么呢?请看第三点。

3、虽说Any CPU编译出来的程序取决于操作系统,但是由Any CPU编译出来dll则取决于调用它的主程序,即若主程序是32位的,那么dll也是32位的,若主程序是64位的,那么dll就是64位的。所以dll一般采用Any CPU平台编译,而主程序(exe)一般采用x86平台编译。

总结:了解了它们的区别之后,我们打包程序的时候就知道如何取舍了。一般来说,在不清楚客户的电脑是什么类型的操作系统的情况下,或者两者都有的时候,则主程序采用x86平台编译,dll采用Any CPU平台编译。若清楚的知道是64位操作系统,那么就可以都按x64平台编译了。

 

.Net编译环境x86,x64,anycpu的区别

.Net编译环境x86,x64,anycpu的区别

一、定义

x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行。
x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行。
anycpu:(默认值)将程序集编译为在任意平台上运行。
Itanium: 将程序集编译为由采用 Itanium 处理器的计算机上的 64 位公共语言运行库运行。

二、选择不同后的行为

在 64 位 Windows 操作系统上:
用 x86 编译的程序集将在 WOW64 下运行的 32 位 CLR 上执行。
用 x64 编译的程序集将在 64 位 CLR 上执行。
用 anycpu 编译的可执行文件将在 64 位 CLR 上执行。
用 anycpu 编译的 DLL 将在与加载它的进程相同的 CLR 上执行。
 
在 32 位 Windows 操作系统上:
用 x86或anycpu 编译的程序集将在 32 位 CLR 上执行。
用 x64 编译的程序集无法运行。

三、AnyCPU(Prefer 32-bit)(看了waterlv,大水哥的博文)

这是在右击属性,选择首选32位才会使用的方法,必须使用 .net framework 4.5 以上才可以使用。在这个编译下,程序运行都是 32 位。

在 32 位系统下,运行 32 位程序

在 64 位系统下,运行 32 位程序,但是可以获得 4G 内存

在 ARM 下,运行 32 位程序

如果使用 AnyCPU 那么编译为 IL 是不需要加平台,程序在机器运行才判断机器平台,自动编译为机器可以运行的程序。

那么 AnyCPU(Prefer 32-bit) 和 x86 有什么区别?实际上在 ARM 系统,只能使用 AnyCPU(Prefer 32-bit) 运行 32 位程序,如果选择 x86 就无法运行。

为什么需要在 64 位的设备使用 AnyCPU(Prefer 32-bit),因为如果存在一些库只能在 32位程序运行,那么就需要运行的程序是 32 位,所以需要使用这个方法。

如果在运行的时候,如何判断当前的系统版本?

可以使用 Environment 来判断,Environment.Is64BitProcess 可以判断当前的程序运行的是 32 还是 64 ,通过 Environment.Is64BitOperatingSystem 可以判断系统

那么如何判断一个 dll 是 x86 还是 any cpu?

可以打开开发者命令,然后输入 corflags 判断,开发者命令一般如果是安装 vs2017 就是Developer Command Prompt for VS 2017,通过开始就可以找到。

corflags lindexi.dll

看输出,就可以知道这个库是什么

Any CPU:

PE: PE32 32BIT: 0

x86:

PE: PE32 32BIT: 1

x64:

PE: PE32+ 32BIT: 0

四、其他编译选择

  • anycpu 默认的编译
  • anycpu32bitpreferred 在 .NET Framework 4.5 和以上才可以使用
  • ARM 程序编译为 ARM 运行
  • x64
  • x86
  • Itanium

如果使用命令编译,那么可以使用platform和字符串

csc /platform:anycpu filename.cs  

andriod studio debug 带签名的release apk

andriod studio debug 带签名的release apk

应用场景:

微信app授权登录,必须打包为带签名的release apk才能与微信互通,此方法便于debug。

操作:

MyApp/build.gradle文件修改:
....
apply plugin: ''com.android.application''

android {

''signingConfigs {
    release {
        keyAlias ''tani''
        keyPassword ''不告诉你''
        storePassword ''不告诉你''
        storeFile file(''D:/不告诉你.jks'')
    }
}''
compileSdkVersion 26
buildToolsVersion ''25.0.0''
//此处省略n个字

}
....

修改后查看 项目-》右键-》open module settings

clipboard.png

clipboard.png

大功告成

asp.net – Visual Studio中Web API和Azure API APP之间的区别

asp.net – Visual Studio中Web API和Azure API APP之间的区别

在创建新的ASP.NET Web应用程序以开发我的API并在Azure中托管它时,我有两个选择:

> Web API
> Azure API APP

我可以创建一个Web API APP并将其托管在Azure API APP中吗?那么它们存在的主要原因是什么?

enter image description here

解决方法

根据您的需要,它们只是不同的起点.

Azure API是一个精简的API模板,支持OpenAPI.

ASP.NET Web API是一个完整的ASP.NET MVC应用程序,主要用于支持API.

差异#1:Web API模板中的身份验证支持

ASP.NET Web API

支持身份验证选择(无,个人用户,工作或学校,Windows).

Screenshot showing selection of authentication support

ASP.NET Azure API应用程序

期望客户提供代币(持票人代币或API代币).使用Azure门户配置用户(不是API令牌)的身份验证和授权.使用Azure API Management(或其他服务)来管理API令牌.

Screenshot showing unavailable selector for authentication support

差异#2:Web API模板中的MVC支持

ASP.NET Web API

自动包含MVC以显示帮助页面.这些与OpenAPI(Swagger)自生成文档不同.

Screenshot showing MVC option preselected,non-editable

ASP.NET Azure API应用程序

不会自动包含MVC或帮助页面

Screenshot showing MVC option not selected,editable

差异#3:支持Web API中的UI文件

ASP.NET Web API

包括区域,内容,HomeController,字体,脚本和视图

Screenshot showing Solution Explorer with expanded assets

ASP.NET Azure API应用程序

Screenshot showing Solution Explorer with minimal assets

差异#4:Web API模板中的更多启动配置

ASP.NET Web API

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterallAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

ASP.NET Azure API应用程序

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

差异#5:Azure API模板中的OpenAPI(Swagger)支持

ASP.NET Web API

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1","value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public void Post([FromBody]string value)
    {
    }

    // PUT api/values/5
    public void Put(int id,[FromBody]string value)
    {
    }

    // DELETE api/values/5
    public void Delete(int id)
    {
    }
}

ASP.NET Azure API应用程序

默认情况下启用OpenAPI(Swagger). OpenAPI JSON文档位于/ swagger / docs / v1

public class ValuesController : ApiController
{
    // GET api/values
    [SwaggerOperation("GetAll")]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1","value2" };
    }

    // GET api/values/5
    [SwaggerOperation("GetById")]
    [SwaggerResponse(HttpStatusCode.OK)]
    [SwaggerResponse(HttpStatusCode.NotFound)]
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    [SwaggerOperation("Create")]
    [SwaggerResponse(HttpStatusCode.Created)]
    public void Post([FromBody]string value)
    {
    }

    // PUT api/values/5
    [SwaggerOperation("Update")]
    [SwaggerResponse(HttpStatusCode.OK)]
    [SwaggerResponse(HttpStatusCode.NotFound)]
    public void Put(int id,[FromBody]string value)
    {
    }

    // DELETE api/values/5
    [SwaggerOperation("Delete")]
    [SwaggerResponse(HttpStatusCode.OK)]
    [SwaggerResponse(HttpStatusCode.NotFound)]
    public void Delete(int id)
    {
    }
}

Blend Visual studio 和Visual studio 的区别

Blend Visual studio 和Visual studio 的区别

blend for visual studio 这个并不是用于开发中写代码的,而是专门用来做WPF的界面设计的。这是为了让专业的人做专业的事,尽量让写代码的人只使用visual studio,而做界面设计的(如美工)只需要画界面。
vs是开打代码的

我们今天的关于Visual Studio中Debug与Release以及x86、x64、Any CPU的区别的分享就到这里,谢谢您的阅读,如果想了解更多关于.Net编译环境x86,x64,anycpu的区别、andriod studio debug 带签名的release apk、asp.net – Visual Studio中Web API和Azure API APP之间的区别、Blend Visual studio 和Visual studio 的区别的相关信息,可以在本站进行搜索。

本文标签: