NuGet - choose references to add on install - nuget-package

I want to pack/publish a NuGet package. (private) using a .nuspec file :
\build
\netstandard1.4
\MyProject.dll
\MyProject.Unmanaged.dll
\net462
\MyProject.dll
\MyProject.Unmanaged.dll
In this package, I have a dll that I want to reference in my project, and another that I can't reference, but that is still required.
When I add the package to a project, the dll are automatically referenced, so I get an error : "Failed to add reference to 'MyProject.Unmanaged'.
Please make sure that the file is accessible, and that it is a valid assembly or COM component.
Is there a way to choose which dll must be automatically referenced or not ?

See the chapter "Explicit assembly references" : https://learn.microsoft.com/en-us/nuget/schema/nuspec

Related

RoslynPad: could not load file or assembly exception

I am using RoslynPad project to test how external plugins (Class libraries) could be used in the script.
I have created Class Library with a single class and method.
In roslynPad project i have added "plugin_demo" into RoslynHostReferences NamespaceDefault structure.
I have also added reference to plugin dll:
MetadataReference newref = MetadataReference.CreateFromFile("G:\\projects\\demos\\plugin_demo\\plugin_demo\\bin\\Debug\\plugin_demo.dll");
MetadataReferences = MetadataReferences.Add(newref);
Now i see that my new class is seen by diagnostics and autocomplition also works.
The code with a method call compiles fine.
But when i run it i get exception:
Could not load assembly or file. File not found.
I have copied plugin_demo.dll into directory where compiled roslynPad dll resides. Still no result.
I have checked that class library and roslynpad use the same .Code version.
What can be the problem?
What is correct way of adding assemblies to roslyn project?
Thanks
I have solved the problem after debugging. The roslynPad project generates file nams_deps.json when editor is launched. It must be deleted and after that the assembly is found.

how to link with an extra object file?

I have a visual c++ project which compiled correctly. Myproject.vcxproj contains a1.cpp, a2.cpp.
Now I'd like to remove a1.cpp from the project and link with the previously generated a1.obj .
I have added $(SolutionDir) to VC++/Library directories
I have added a1.obj to Linker/Input/Additional dependencies
I have got the following error message
LINK : fatal error LNK1104: cannot open file 'a1.obj'
What I made wrong?
I'm using Visual C++ Express 2010.
A (relatively) clean way to do what you seem to be trying to do is to make a library in the same solution, and add it as a reference to the project that will use it.
Right click the project, select "References" then "Add new reference" and then select the library project in your solution.
If you really want to try using the linker properties, note that there is a "Additional Libraries Directory" setting - this will need to be the OutputDir of the project you are trying to import - and is different to the "Additional dependencies" library name (just the lib name without a path)

How to use tlb files in a native C++ project

I have a tlb files that contains some function declaration that I need to use.
If I use
#import "type_library.tlb"
I can correclty reference the function from my code:
tlb_namespace::required_function();
But when I compile the project the linker says that tlb_namespace::required_function is an unresolved external symbol.
How can I succesfully build this kind of project?
EDIT:
I have used the same type library in a Dummy VBA access project. I have added the reference to the type library and I have noticed that some of the function contained in the type library are correctly called. But some of them are not. VBA says It can't locate their entry point in the related dll.
Can this explain the unresolved external symbol when building c++ app?
I have also noticed that the failing function are declared in the tlb like this:
UPPER_function_name
but in the dll are declared like this:
Upper_function_name
Can this be the issue?
Is it possible to solve this kind of error directly modifying the binary tlb file or dll?
Use IDE to view TLB information.
Use this help : How to: View Type Library Information
At IDE : View-> Object Browser, click "..." Edit Custom Component Set, browse your TLB file and Add to view information.
Confirm namespace used for.
use the namespace to resolve the linker error:
example:
#import "<>" raw_interfaces_only
using namespace <>
this will resolve the problem

adding .dll external file reference to my project doesn't work

I'm trying to add an External Reference to my Windows Forms project. I have the file named "ExtendedRichTextBox.dll" externaly from another project I downloaded from CodeProject.com
I added it, by browsing for it from Add reference dialog, and did also another time by copying the file to the debug folder of my project and adding the reference then from extensions.
Either way, the reference's proper function is not working. (I added "using ExtendedRichTextBox" to directive usings)
help !
Yes, thank you.
I managed to handle the problem it was on because the richtextbox I'm using was declared as this.richTextBox1 = new System.Windows.Forms.richtextbox where it should be declared as an extendedrichtextbox extention:
What should've been done was declaring "this.richTextBox1 = new ExtendedRichTextBox.RichTextBoxPrintCtrl();"

Error while compiling a library in C#

I am trying to compile a class(sqlAccess) declared as public with few methods related to database connection in it. I am getting the following error ...
Error 1 Friend access was granted to 'SqlAccess, PublicKey=00c8', but the output assembly is named 'SQLAccess, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Try adding a reference to 'SqlAccess, PublicKey=00c8' or changing the output assembly name to match. c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll SQLAccess
What could be the reason? is there already a method of that name? I am new to programming so am unable to understand this clearly. Thank you.
This worked for me:
Open the Properties|Signing Tab. Ensure that you have "Sign the Assembly" checked and the strong name key file referenced. Save and compile the Project/Solution.
(cited from MSDN)
.NET seems to get grumpy if you give your assembly/project a name that isn't unique. In your case, SqlAccess must already exist in .NET or a referenced assembly.
The fix is to rename your assembly.
Similar issue:
Weird error in C#
That's because SqlAccess assembly has a reference which granted internal access to SqlAccess. It must be something like this [you will find it in AssemblyInfo.cs] :
[assembly: InternalsVisibleTo("Name of assembly goes here, PublicKey=")]
During compile time when compiler can not find assembly with specific PublicKey, you will get the error such as 'Friend access was granted to...'.
In order to resolve this problem one solution is to remove above attribute from source assembly, or add new public key and change it in source assembly.
Reason behind this should be either you have reinstall/update that particular dll within your solution and but old dll was not deleted properly from your solution and system.
That's why, it got worked when you change the Assembly name (from sqlAccess to sqlAccessXYZ)
I changed the Assembly name to sqlAccessXYZ and now its working, the problem is with the name. Not sure what exactly the problem, for now the issue is resolved. Thanks.

Resources