GVKun编程网logo

相当于 dotnet core/csproj 中的 AssemblyInfo

9

在本文中,我们将给您介绍关于相当于dotnetcore/csproj中的AssemblyInfo的详细内容,此外,我们还将为您提供关于.net–AssemblyInfo属性如何映射到Win32VERS

在本文中,我们将给您介绍关于相当于 dotnet core/csproj 中的 AssemblyInfo的详细内容,此外,我们还将为您提供关于.net – AssemblyInfo属性如何映射到Win32 VERSIONINFO?、.net – WinRT不支持Assembly.GetCallingAssembly,但适用于可移植类库?、ASP.Net C#AssemblyInfo版本不起作用、ASP.NET Core Blazor WebAssembly 之 .NET JavaScript 互调的知识。

本文目录一览:

相当于 dotnet core/csproj 中的 AssemblyInfo

相当于 dotnet core/csproj 中的 AssemblyInfo

由于 dotnet core 移回了该.csproj格式,因此有一个新的自动生成MyProject.AssemblyInfo.cs的,其中包含:

[assembly: AssemblyCompany("MyProject")][assembly: AssemblyVersion("1.0.0.0")]

请注意 ,这是在每次构建时自动重新生成的。以前,该文件是在 /obj/
目录中找到的,现在它似乎只在内存中,因为在磁盘上找不到该文件并且单击错误消息不会打开任何文件。

这是错误消息:
在此处输入图像描述

由于它们是在那里定义的,我无法在经典中自己定义它们AssemblyInfo.cs

我在哪里/如何定义项目的公司和版本?

答案1

小编典典

正如您已经注意到的,您可以在 .csproj 中控制大多数这些设置。

如果您希望将这些保留在 AssemblyInfo.cs 中,您可以关闭自动生成的程序集属性。

<PropertyGroup>   <GenerateAssemblyInfo>false</GenerateAssemblyInfo></PropertyGroup>

如果您想了解幕后发生的事情,请查看Microsoft.NET.Sdk中的
Microsoft.NET.GenerateAssemblyInfo.targets。

.net – AssemblyInfo属性如何映射到Win32 VERSIONINFO?

.net – AssemblyInfo属性如何映射到Win32 VERSIONINFO?

当您查看包含VERSIONINFO资源的二进制文件的属性时,Windows会添加一个“版本”选项卡,该选项卡显示该信息.

是否有一个列表,其中的.NET程序集属性映射到哪些VERSIONINFO字段,因此我们可以轻松地为.NET程序集控制这些属性?

关于“固定信息”:

PRODUCTVERSION和FILeverSION分别来自[AssemblyinformationalVersion]和[AssemblyFiLeversion].

FILEOS,FILETYPE很可能是由编译器设置的.

关于Var File Info

[AssemblyCulture]映射到“翻译”(我猜!)

关于String File Info

[AssemblyCompany]映射到“CompanyName”
[AssemblyDescription]映射到“评论”
[AssemblyFiLeversion]映射到“FiLeversion”
[AssemblyTitle]映射到“FileDescription”
[AssemblyinformationalVersion]映射到“ProductVersion”
[AssemblyProduct]映射到“ProductName”
[Assemblycopyright]映射到“Legalcopyright”

我认为“InternalName”和“OriginalFile”分别设置为DLL或EXE的名称.

.net – WinRT不支持Assembly.GetCallingAssembly,但适用于可移植类库?

.net – WinRT不支持Assembly.GetCallingAssembly,但适用于可移植类库?

我需要获得一些关于调用我的组件的程序集的元数据.因此,使用Assembly.GetCallingAssembly()似乎很自然.但是,我发现除了 Windows应用商店外,它无处不在.它支持的地方:

> Phone 7.0+
> .Net 1.0
> Portable Class Libraries

但是,不支持的位置直接位于Windows应用商店应用程序中.我可以创建一个可移植的类库,然后从Windows应用程序内部调用它,但我不能直接将它放在Windows应用商店应用程序/类库中.

是否有解决方法来获取由Assembly提供的元数据类型或其他方式?

Assembly.GetCallingAssembly没有在WinRT中公开 – 据说是因为它的语义在内联等方面是不可靠的( source),但它也不适合Windows Store应用程序中允许的受限反射.你可以得到像Assembly.GetCurrentAssembly()这样的东西,例如:
typeof(MainPage).GetTypeInfo().Assembly

但那根本不一样.使用受限制的反射模型,也无法在.NET中获得运行时的堆栈跟踪.

至于可移植类库,我当然会说可以在可移植类库中支持Assembly.GetCurrentAssembly(),但不是在WinRT中 – 如果它不在那个平台中就有意义.但实际上,它似乎存在于包括WinRT在内的所有配置文件中,除了WinRT .NET4.5之外 – 似乎必须在某种程度上忽略这种不一致性.因此该方法存在于WinRT中(而且还没有进行重定向),但在编译时可用的元数据中不可见.

因此,您可以使用反射调用该方法:

var assembly = (Assembly) typeof(Assembly).GetTypeInfo()
    .GetDeclaredMethod("GetCallingAssembly")
    .Invoke(null,new object[0]);

我认为在Windows应用商店应用中这种方法的不可见性是“我们希望这会消失”.

(这个答案只涉及“我可以”而不是“我应该”).

ASP.Net C#AssemblyInfo版本不起作用

ASP.Net C#AssemblyInfo版本不起作用

这是我正在使用的 help file.它声明它仍适用于4.6版.

然而,当我尝试使用内置计算时,使用以下代码:

[assembly: AssemblyVersion("2015.7.*.*")]
[assembly: AssemblyFiLeversion("2015.7.*.*")]

我在星号上遇到语法错误,解决方案无法编译.我不知道发生了什么事.根据帮助文件,它应该工作.

解决方法

你不需要两个*只需一个即可.
[assembly: AssemblyVersion("2015.7.*")]

从你的链接

Examples of valid version strings include:

1

1.1

1.1.*

1.1.1

1.1.1.*

1.1.1.1

删除AssemblyFiLeversion.

If the AssemblyFiLeversionAttribute is not supplied,the AssemblyVersionAttribute is used for the Win32 file version that is displayed on the Version tab of the Windows file properties dialog.

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript 互调

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript 互调

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

转:

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript 互调

Blazor WebAssembly 可以在浏览器上跑 C# 代码,但是很多时候显然还是需要跟 JavaScript 打交道。比如操作 dom,当然跟 angular、vue 一样不提倡直接操作 dom;比如浏览器的后退导航。反之 JavaScript 也有可能需要调用 C# 代码来实现一些功能,毕竟客户的需求是千变万化的,有的时候只能通过一些 hack 的手段来实现。

.NET 调用 JavaScript 函数

使用 JSRuntime.InvokeVoidAsync 调用无返回值的 JavaScript 函数

显然我们的.NET 类库里不会有 JavaScript 内置的 alert 方法来显示提示,这里演示下如何调用 JavaScript 的 alert 方法:

.net call javascript

@inject IJSRuntime jsRuntime @code { private void CallJs() { jsRuntime.InvokeVoidAsync("alert", "this message from .net runtime ."); } }

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调

使用 JSRuntime.InvokeVoidAsync 调用具有返回值的 JavaScript 函数

我们在 JavaScript 环境定义一个加法函数然后.NET 这边调用拿到结果:

    

注意:JavaScript 代码要放到 wwwroot/index.html 页面上里,不能直接放在组件里。

组件代码:

.net call javascript

sum: @sum @inject IJSRuntime jsRuntime @code { private int sum = 0; private async void CallJs() { sum = await jsRuntime.InvokeAsync ("add", sum, 2); this.StateHasChanged(); } }

运行一下:

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调

JavaScript 调用.NET 方法

JavaScript 调用.NET 静态方法

JavaScript 调用.NET 静态方法比较简单,把静态方法加上 [JSInvokable],然后在 JavaScript 环境使用 DotNet 对象直接 call 就行:
定义.NET 静态方法:


    [JSInvokable]
    public static string GetNow()
    {
        return DateTime.Now.ToString();
    }

使用 JavaScript 调用 GetNow:

  $(document).ready(
            setTimeout(() => {
                $(''#btn1'').on(''click'', function () {
                    DotNet.invokeMethodAsync(''BlazorWasmComponent'', ''GetNow'')
                        .then(data => {
                            alert(data);
                        });
                })
            }, 10000)
        ); 

由于 Blazor 渲染 UI 结束后按钮才会插入到 dom 树上,所以这里使用一个傻办法让绑定事件的 JavaScript 代码置后运行。
运行一下:
ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调

JavaScript 调用组件里的方法

JavaScript 调用组件里的方法比较绕,其实还是通过一个静态方法作为入口,把实例方法绑定一个静态 delegate,然后让这个静态方法去执行 delegate。
.NET 代码:

javascript call .net

@inject IJSRuntime jsRuntime @code { [JSInvokable] public static string GetNow() { return Act(""); } public static Func Act; protected override void OnInitialized() { Act = GetNowInInstance; base.OnInitialized(); } public string GetNowInInstance(string str) { return DateTime.Now.ToString(); } }

JavaScript 代码:

 $(document).ready(
            setTimeout(() => {
                $(''#btn1'').on(''click'', function () {
                    DotNet.invokeMethodAsync(''BlazorWasmComponent'', ''GetNow'')
                        .then(data => {
                            alert(data);
                        });
                })
            }, 10000)
        ); 

运行一下:
ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调

调用对象的方法

Blazor 还可以把.NET 对象 (引用) 直接传递到 JavaScript 运行时来让 JavaScript 直接调用.NET 对象的方法。

总的来说大概分 4 步:

  1. 实例化.net 对象
  2. DotNetObjectReference.Create 方法把.NET 对象包装
  3. 通过 JSRuntime 调用一个 JavaScript 方法把第二步生成的对象传递到 JavaScript 运行时
  4. 在 JavaScript 侧通过 invokeMethodAsync 方法调用.NET 对象里的方法

下面演示下把组件整个实例传递出去,然后调用里面的 GetNowInInstance 方法。

.net 代码:

javascript call .net

@implements IDisposable @inject IJSRuntime jsRuntime @code { IDisposable _objRef; protected async override Task OnInitializedAsync() { _objRef = DotNetObjectReference.Create(this); await jsRuntime.InvokeAsync ( "receiveNetObj", _objRef); base.OnInitialized(); } [JSInvokable] public string GetNowInInstance() { return DateTime.Now.ToString(); } public void Dispose() { _objRef?.Dispose(); } }

注意:把.NET 对象传递到 JavaScript 运行时存在内存泄漏的风险,所以组件需要实现 IDisposable 接口,在 Dispose 方法内调用 objRef 的 Dispose 方法来释放内存。

JavaScript 代码:

        var _netObj = null;

        function receiveNetObj(obj) {
            _netObj = obj;
        }

        $(document).ready(
            setTimeout(() => {
                $(''#btn1'').on(''click'', function () {
                    _netObj.invokeMethodAsync("GetNowInInstance").then(
                        r => alert(r)
                    );
                })
            }, 10000)
        );

运行一下:
ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调

总结

使用 JSRuntime 可以在.NET 里调用 JavaScript 的方法,这些方法必须是全局的,也就是挂载在 window 对象上的。
在 JavaScript 里调用.NET 方法主要有两种:

  1. 通过 DotNet 方式调用.NET 的静态方法
  2. 把.NET 对象直接传递到 JavaScript 运行时来调用对象上的方法

相关内容

ASP.NET Core Blazor Webassembly 之 路由
ASP.NET Core Blazor Webassembly 之 数据绑定
ASP.NET Core Blazor Webassembly 之 组件
ASP.NET Core Blazor 初探之 Blazor WebAssembly
ASP.NET Core Blazor 初探之 Blazor Server

转:

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript 互调


--Posted from Rpc

今天关于相当于 dotnet core/csproj 中的 AssemblyInfo的分享就到这里,希望大家有所收获,若想了解更多关于.net – AssemblyInfo属性如何映射到Win32 VERSIONINFO?、.net – WinRT不支持Assembly.GetCallingAssembly,但适用于可移植类库?、ASP.Net C#AssemblyInfo版本不起作用、ASP.NET Core Blazor WebAssembly 之 .NET JavaScript 互调等相关知识,可以在本站进行查询。

本文标签: