|
It is not that it is impossible, but that a file cannot be found. The English translation is a fairly common exception:
Quote: Unhandled exception of type 'System.IO.FileNotFoundException' in OpcNetApi.dll
Additional Information: Unable to load file or assembly 'OpcRcw.Dx, Version = 1.0.1.21, Culture = neutral, PublicKeyToken = 9a40e993cbface53' or one of its dependencies. The specified file could not be found.
So, you need to find out why the file OpcRcw.Dx, with the related version, cannot be found in the expected library locations.
|
|
|
|
|
In this folder
Quote: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\OpcNetApi\v4.0_2.1.106.0__78aea80f6827b5ab
I found OpcNetApi.dll
In the
Quote: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\OpcRcw.Dx\v4.0_1.0.2.0__78aea80f6827b5ab
I found OpcRcw.Dx.dll
So at least positive is that files exist. May be missing some registration? I installed everything with the proper installation/licensing process.
|
|
|
|
|
The version information does not match the values in your error message. So somehow either the calling DLL is trying to get the wrong version, or the wrong version was installed. In either case you will need to go back to the suppliers of this software to get the correct versions.
|
|
|
|
|
Is the highlighted part of the folder name containing the dll the version number?
Quote: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\OpcRcw.Dx\v4.0_1.0.2.0__78aea80f6827b5ab
Or better where do I get it?
|
|
|
|
|
The final values in that path certainly look like the version and PublicKeyToken. But since they are different from the values in the error message it looks certain that you have the wrong version of this or the DLL installed. As I said before, you need to go back to the people who produce this software to get the correct version(s).
|
|
|
|
|
Is the library 32-bit only? Is your app compiled as AnyCPU or x64?
Or the other way around? Is the library 64-bit only and your app compiled as x86?
Are there any documented dependencies for this library? Are those installed?
UPDATE
Well, a little Google comes up with this:
.NET api: can't find opcnetapi.dll | Classic OPC: DA, A&E, HDA, XML-DA, etc. | Forum - OPC Foundation[^]
The Rcw version is for .NET 1.x, which will not work on .NET 2.0 and above. Also, it seems the installers put out by Opc are known to be bad.
|
|
|
|
|
I am out of office now. I will collect the info asap.
Regards
|
|
|
|
|
Operating system is windows 10 pro , 64bit, processor x64 based
I am compiling app as x86.
I do not know how to find if library is 32 or 64 bit only
|
|
|
|
|
Run up a "Visual Studio X86 native tools command line".
Use CD to change to the folder containing the DLL file.
Type this: "dumpbin /headers nameofthedllfile.DLL" and press enter.
if you scroll back to the beginning of the output, it will give you the PE file details,
which will look like this for a x86 DLL:
PE signature found
File Type: DLL
FILE HEADER VALUES
14C machine (x86)
3 number of sections
546DE7F8 time date stamp Thu Nov 20 13:09:12 2014
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
2102 characteristics
Executable
32 bit word machine
DLL And like this for a x64:
PE signature found
File Type: DLL
FILE HEADER VALUES
8664 machine (x64)
2 number of sections
5BB6183D time date stamp Thu Oct 04 14:40:13 2018
0 file pointer to symbol table
0 number of symbols
F0 size of optional header
2022 characteristics
Executable
Application can handle large (>2GB) addresses
DLL
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
From the type given in the error message, "OpcRcw.Dx", and the quick Google search I did, you're trying to use the .NET 1.x version of the library which will not work in any app compiled against .NET 2.0 and above.
|
|
|
|
|
I see that the calling code is searching for a specific version of OpcRcw.Dx.dll
Now is it the calling code wrongly searching an old/uncompatible version or is it simply the OpcRcw.Dx.dll of an old version and so to be replaced?
|
|
|
|
|
You set a reference to the RCW version in your project, so that's the version the code is looking for.
|
|
|
|
|
I took the "new" OPC libraries from the folder I was speaking some posts ago installed I guess by the factory talk gateway and they are version
2.1.106.0 . Then I copied them within the opportune "solution" folder overwriting the old ones. Then I added the reference to them to the app. Now I get compiling errors that I cannot decode. I attach here one of them.
It is in italian so I try to translate
It was impossible to resolve reference "OpcNetApi, ...." because it was compiled with framework
".NETFramework,Version=v4.5.1" This is successive to the current destination framework v4.0
C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3274: non è stato possibile risolvere il riferimento primario "OpcNetApi, Version=2.1.106.0, Culture=neutral, PublicKeyToken=78aea80f6827b5ab, processorArchitecture=MSIL" perché è stato compilato con il framework".NETFramework,Version=v4.5.1". Questa versione è successiva a quella del framework di destinazione corrente ".NETFramework,Version=v4.0,Profile=Client".
|
|
|
|
|
When you start copying .DLL's all over and setting references to them, you're throwing out all the documented standard procedures and solutions.
I have no idea how this library works, how it behaves in Visual Studio, or how it appears in References.
References does tell you which libraries are referenced. Just click on the reference and look in the Properties window and it'll tell you what the filename is.
As for how to fix this, I can't tell you. I'm not familiar with the library at all. Everything I've said has just come from a Google search.
|
|
|
|
|
Ok
I had to open the app.csproj with notepad and change
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
into
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
Now app compiles. But do you know how to discriminate within an existing project if it is done to work with a certain framework version of .NET or with another (without doing what I did opening with a text editor the .csproj file) ?. And further do you know how to change version to that app or to a new one with the tools of visual studio.
Thank you for the help
Roberto
|
|
|
|
|
Go into the Project Properties and change the Target Framework.
|
|
|
|
|
I have two USB touchscreens connected to a PC. I need a way of detecting which of the two touchscreens was last touched via its HID PID, VID or port. What makes it difficult is that the app that needs to be detecting this will be minimized so will not have the focus i.e. it will not be active. I have experimented with some samples I found online using the RAWINPUT approach with two USB keyboards but that requires the app to be active in order to receive the keyboard events.
The OS that this app will need to run on is both Windows 7 and 10. I am not looking to capture any data from the device but just to know which of the two devices is currently sending data.
Is there a way of doing this using C#?
Thanks.
|
|
|
|
|
I have a simple valid JSON file:
{
"statistiques":
{
"number":20944
}
}
I am using NewtonSoft JSON
and used this example as a starting point:
Deserialize JSON from a file
public class statistiques
{
public int number;
};
string raw = File.ReadAllText(@"C:\data.json");
statistiques allStats = JsonConvert.DeserializeObject<statistiques>(raw);
The resulting AllStats is empty.
Am I missing something ?
Solution:
public class RootObject
{
public Statistiques statistiques { get; set; }
public List<Circonscription> circonscriptions { get; set; }
}
I needed to have a root class.
Thanks.
I'd rather be phishing!
modified 2-Oct-18 15:48pm.
|
|
|
|
|
It seems I have a memory leak in my app. Which I seem to be able to reproduce with this simple console app.
Could anyone tell me what I am missing or where I am mislead?
(FYI, working set is printed about every seconds..)
using System;
using System.Threading;
using System.Threading.Tasks;
namespace CrazyAsync
{
class Foo
{
public Func<CancellationToken, Task> Work;
public async Task DoWork(CancellationToken token)
{
while (!token.IsCancellationRequested)
await Work?.Invoke(token);
}
}
class Mamamia
{
public Task DoIt(CancellationToken token)
{
var t = Task.Delay(6, token);
t.ContinueWith(x =>
{
if (x.Status == TaskStatus.Faulted)
Console.WriteLine(x.Exception.InnerException);
if (i++ % 100 == 0)
{
GC.Collect();
Program.DumpMemory();
}
});
return t;
}
int i = 0;
}
class Program
{
static async Task Main(string[] args)
{
var cc = new CancellationTokenSource(TimeSpan.FromMinutes(1));
var m = new Mamamia();
var foo = new Foo()
{
Work = m.DoIt,
};
await foo.DoWork(cc.Token);
}
public static void DumpMemory()
{
var m = Environment.WorkingSet;
Console.WriteLine($"Mem: {m:#,###}");
}
}
}
[EDIT] my bad, the memory only seems to increase for 2 minutes after all.... must be a wrong lead
modified 2-Oct-18 4:28am.
|
|
|
|
|
My only note would be that CancellationTokenSource is disposable, but that should only impact your cleanup.
"Never attribute to malice that which can be explained by stupidity."
- Hanlon's Razor
|
|
|
|
|
I want code for Sqlite DB Browser Verication Multiple DB verification in entire Data
COde in Windows Form
I tried the code but not Verify the proporlly
|
|
|
|
|
wrote: I want code for This site does not provide code to order.
wrote: I tried the code but not What code? Please edit your question and provide proper details of your problem.
|
|
|
|
|
It doesn't quite work like that.
We do not do your work for you.
If you want someone to write your code, you have to pay - I suggest you go to Freelancer.com and ask there.
But be aware: you get what you pay for. Pay peanuts, get monkeys.
The idea of "development" is as the word suggests: "The systematic use of scientific and technical knowledge to meet specific objectives or requirements." BusinessDictionary.com[^]
That's not the same thing as "have a quick google and give up if I can't find exactly the right code".
So either pay someone to do it, or learn how to write it yourself. We aren't here to do it for you.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
How do I alter my code to generate a 4 by 9 array of random numbers between -2 and 4? It currently is generating a 9 by 9 array of random numbers.
static void Main(string[] args)
{
Random r = new Random();
const int size = 9;
int[,] arr = new int[size, size];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
arr[i, j] = r.Next(-2, 4);
Console.Write(arr[i, j] + " ");
}
Console.WriteLine(" ");
}
Console.ReadKey();
|
|
|
|
|
You have a variable, size , with a value of 9. Where's your value of 4 for an array size?
|
|
|
|