在本文中,我们将给您介绍关于相当于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
- .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
格式,因此有一个新的自动生成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程序集属性映射到哪些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,但适用于可移植类库?
> Phone 7.0+
> .Net 1.0
> Portable Class Libraries
但是,不支持的位置直接位于Windows应用商店应用程序中.我可以创建一个可移植的类库,然后从Windows应用程序内部调用它,但我不能直接将它放在Windows应用商店应用程序/类库中.
是否有解决方法来获取由Assembly提供的元数据类型或其他方式?
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版本不起作用
然而,当我尝试使用内置计算时,使用以下代码:
[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 互调
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 .");
}
}
使用 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();
}
}
运行一下:
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 代码置后运行。
运行一下:
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)
);
运行一下:
调用对象的方法
Blazor 还可以把.NET 对象 (引用) 直接传递到 JavaScript 运行时来让 JavaScript 直接调用.NET 对象的方法。
总的来说大概分 4 步:
- 实例化.net 对象
- DotNetObjectReference.Create 方法把.NET 对象包装
- 通过 JSRuntime 调用一个 JavaScript 方法把第二步生成的对象传递到 JavaScript 运行时
- 在 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)
);
运行一下:
总结
使用 JSRuntime 可以在.NET 里调用 JavaScript 的方法,这些方法必须是全局的,也就是挂载在 window 对象上的。
在 JavaScript 里调用.NET 方法主要有两种:
- 通过 DotNet 方式调用.NET 的静态方法
- 把.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 互调等相关知识,可以在本站进行查询。
本文标签: