我使用ExcelDNA和C#开发了Excel XLL.我正处于开始测试部署的阶段,但找不到实际提供有效步骤的大量信息.
我的项目是作为带有ExcelDna参考的类库开发的.在.dna文件中,我有下面的代码将所有资源打包到XLL的打包版本(即Pack ="true"属性).
<DnaLibrary Name="ExcelXLL" RuntimeVersion="v4.0" Language="C#">
<ExternalLibrary Path="ExcelXLL.dll" LoadFromBytes="false" Pack="true" />
Run Code Online (Sandbox Code Playgroud)
我想将打包的XLL部署到路径中的目标机器:
%APPDATA%\Microsoft\AddIns
Run Code Online (Sandbox Code Playgroud)
为了使用Excel自动注册XLL,我需要添加一个注册表项,该注册表项取决于用户拥有的Excel版本.
例如,在我的计算机上(运行Excel 2007 32位的Windows 7 64位),我需要将注册表项添加到以下路径:
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Options\
Run Code Online (Sandbox Code Playgroud)
键是REG_SZ类型,名称为OPEN(或OPEN1,OPEN2等),值为/ R"ExcelXLL-packed.xll"
我有两个问题.第一个是确定用户必须获得正确路径的Excel版本,第二个是确定我需要创建的正确OPEN版本(例如,如果用户已经有OPEN,OPEN1和OPEN2那么我会创建一个OPEN3键).
我正在尝试使用安装和部署项目或InstallShield LE项目进行安装,但无法确定如何进行此操作.有谁知道如何做到这一点或更好的方式吗?
编辑1:
我对此做了大量研究,并查看了几个Windows安装程序.
在打包和部署以及InstallShield LE中,我可以通过将安装程序类放入我的类库并将项目输出与安装捆绑来使安装/卸载工作.在这种方法中,我使用安装程序类处理插入/删除注册表项.我遇到的问题是用户必须先卸载才能运行新安装(无更新功能).
我下载了安装工厂演示版,可以安装/更新工作,但不能进行框架检查(不随演示一起提供).此外,卸载失败(尽管我可以通过更多的调查来解决此问题).
我对使用WiX安装程序感兴趣,但想知道是否有人有关于如何使用WiX执行部署的示例.我还想知道是否需要使用安装程序类,或者是否有不同的方法来处理在HKCU\Software\Microsoft\Office [Version] .0\Excel\Options下搜索OPEN [n]键.如果我使用项目输出来启用安装程序类,那么我需要有两个单独的目标目录(一个在Program Files下用于基本项目输出,一个在%appdata%\ Microsoft\AddIns下用于打包的XLL).
任何帮助是极大的赞赏.
谢谢,
背风处
我正在编写一个Web API项目(MVC架构).我有一个实用程序类,其方法返回一个HttpResponseMessage.如果此类放在Utility文件夹中,一切正常.如果我尝试将该类放在App_Code文件夹中,我会收到消息"找不到类型或命名空间名称'HttpResponseMessage'."
下面提供了发生这种情况的方法的示例.需要做什么才能在App_Code文件夹中将变量或方法声明为HttpResponseMessage?
public HttpResponseMessage GetResponseMessage<T>(T item, MediaTypeFormatter mtFormatter)
{
HttpResponseMessage response = new HttpResponseMessage()
{
Content = new ObjectContent<T>(item, mtFormatter)
};
return response;
}
Run Code Online (Sandbox Code Playgroud) c#-4.0 asp.net-web-api system.net.httpwebrequest visual-studio-2012
我最近将 webapi 升级到 .NET 8。当我测试控制器时,ApiVersion 属性在 swagger 页面中不起作用。
[ApiVersion("1.0")]
[Route("v{version:apiVersion}/api/[controller]")]
[ApiController]
[Authorize]
public class SubscriptionController(ISubscriptionDataService subscriptionDataService,
IConfigurationService configurationService) : ControllerBase
Run Code Online (Sandbox Code Playgroud)
在 swagger 页面中,默认情况下不会填写版本,就像在 .NET 7 中一样。
以前,使用默认模板weatherforecast 控制器时,行为是默认填充的。
该控制器的代码如图所示。
[ApiVersion("1.0")]
[Route("v{version:apiVersion}/api/[controller]")]
[ApiController]
[Authorize]
public class WeatherForecastController : ControllerBase
Run Code Online (Sandbox Code Playgroud)
在 Program.cs 中,添加以下内容以执行版本控制。
private static void AddApiVersioning(IServiceCollection services)
{
services.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = false;
options.ReportApiVersions = false;
});
services.AddVersionedApiExplorer(options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
});
}
Run Code Online (Sandbox Code Playgroud)
编辑1
由于以下弃用,完成此操作的方式需要更改。
Microsoft.AspNetCore.Mvc.Versioning -> Asp.Versioning.Mvc Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer -> Asp.Versioning.Mvc.ApiExplore
在Program.cs中,需要完成以下操作:
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddApiVersioning(options …
Run Code Online (Sandbox Code Playgroud) 我们的团队使用 C#,最近更新到 Visual Studio 2019 Professional。我们正在尝试将 Live Share 用于 TDD。
虽然我们可以看到另一个打字,但远程用户无法构建或运行单元测试。
我缺少配置吗?
编辑 1 我知道这是一篇旧帖子。微软似乎为了安全而牺牲了可用性。使用 LiveShare 唯一可以做的就是一起编写代码。人员编码测试不能远程(AFAIK)。此外,要进行结对编程,它将以一种糟糕的方式工作(即导航器可以进行更改,但驱动程序不一定会看到它们,特别是如果它们在另一个文件中,除非明确告诉在哪里查看)。当驱动程序和导航器需要切换时,将代码推送到存储库、终止实时共享会话并让新驱动程序拉取它并开始新的实时共享会话似乎更容易。
就 mob 编程而言,这似乎确实无法扩展。
我正在使用 ag-grid-react 和 ag-grid-community 版本 22.1.1。我的应用程序是使用功能组件和钩子编写的。我有一个 cellrenderer 组件,它尝试使用此处找到的示例调用父组件内的处理程序。这是ag-grid中的错误吗?在我学习 React 的过程中,我已经在这个应用程序上工作了一年多,这是我最后一个主要的阻碍,所以任何帮助或获得帮助的地方都将不胜感激。
单元渲染器组件
import React from 'react';
import Button from '../../button/button';
const RowButtonRenderer = props => {
const editClickHandler = (props) => {
let d = props.data;
console.log(d);
props.context.foo({d});
//props.editClicked(props);
}
const deleteClickHandler = (props) => {
props.deleteClicked(props);
}
return (<span>
<Button classname={'rowbuttons'} onClick={() => { editClickHandler(props) }} caption={'Edit'} />
<Button classname={'rowbuttons'} onClick={() => { deleteClickHandler(props) }} caption={'Delete'} />
</span>);
};
export default RowButtonRenderer;
Run Code Online (Sandbox Code Playgroud)
父组件
function Checking() {
function foo(props) …
Run Code Online (Sandbox Code Playgroud)