在VS Enterprise 2017 15.8.2中完成了以下操作。我已经将.NET Framework项目(C#)转换为netstandard,然后由于生成问题不得不将其转换回。通过从git恢复先前的提交来完成转换。但是,现在VS无法将项目识别为有效项目。链接的单元测试项目将生成警告
找不到引用的组件“ <项目名称>”。
尝试查看项目属性会产生错误
尝试加载项目属性窗口时发生错误。关闭窗口,然后重试。找不到会员。(来自HRESULT的异常:0x80020003(DISP_E_MEMBERNOTFOUND))
构建选择选项从构建菜单中消失,而构建/调试选项从项目上下文菜单中消失。解决方案资源管理器的依赖项节点为空。我看到过其他帖子,其中有人描述了类似的情况,可以通过重新打开解决方案或将vs模式更改为其他开发类型或删除bin / obj来解决。这些都不起作用,也没有完全重新启动。考虑到该项目文件曾经是框架,我怀疑.gitignore覆盖了某个地方需要删除的某些内容。
我试图AmsiScanBuffer从托管代码中使用Windows防恶意软件服务接口的功能,特别是C#.尝试调用该方法时,只要提供非零缓冲区长度,程序就会挂起.如果提供的缓冲区长度为0,则该方法立即返回HResult E_INVALIDARG.AMSI暴露的其他方法按预期工作,所以我希望我相信我的dllimport这个功能很接近但可能不完全正确.除了这里表示的数组复制方法,我尝试固定数组,行为是相同的.
C原型
HRESULT WINAPI AmsiScanBuffer(
_In_ HAMSICONTEXT amsiContext,
_In_ PVOID buffer,
_In_ ULONG length,
_In_ LPCWSTR contentName,
_In_opt_ HAMSISESSION session,
_Out_ AMSI_RESULT *result
);
Run Code Online (Sandbox Code Playgroud)
托管代码
[DllImport("Amsi.dll", EntryPoint = "AmsiScanBuffer", CallingConvention = CallingConvention.StdCall)]
public static extern int ScanBuffer(IntPtr amsiContext, IntPtr ptr, ulong length, string contentName, IntPtr session, out int result);
var virus = "X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*";
var bytes = Encoding.UTF8.GetBytes(virus);
int sizet = Marshal.SizeOf(typeof(byte)) * bytes.Length;
var ptr = Marshal.AllocHGlobal(sizet);
try
{
Marshal.Copy(bytes, 0, ptr, bytes.Length);
int hr = Amsi.ScanBuffer(context, …Run Code Online (Sandbox Code Playgroud) 我在文档中看到队列和 blob 触发器将导致本机重试 5 次。我相信这在某些情况下非常有用,但在其他情况下也没有帮助。是否可以设置一些配置位来删除这些重试?如果某个函数由于 cosmosdb 绑定的 RU 耗尽而失败,那么快速运行它 4 次以上不太可能获得不同的结果。
移植现有框架应用到核心中,我们早已取代System.Security.Cryptography.SHA256,并System.Security.Cryptography.SHA256Managed用System.Security.Cryptography.SHA256Cng。是否有这些*Cng类型的 .net 核心等价物?如果不是,那么核心中是否存在与框架中存在的相同安全问题?