Avatar of FrancineTaylor
FrancineTaylor
 asked on

Resource files not being copied to /bin when compiled thru VS

My company has a product with a large number of standalone modules (AP, AR, etc).  It is written in C# and VB.NET, developed with VS, currently compiled in 2010.

One of my areas of responsibility is the icons, mostly contained in .resource files.  There are about a dozen .resource files, most needing to be copied into all the modules' /bin directories.

Here's the behavior that we are experiencing.  Say I modify a .resource file.  I check it into Subversion and it goes into the pipeline to be distributed to QA and UX through the normal build.  No problems there.

But when other developers try to compile, they end up getting the old version of the .resource file copied into their /bin directories.  If a new .resource file was added, they don't get it at all.  If they copy it manually, it is blown away and overwritten each time they compile.  So we have to use batch files to do a manual copy, run after the application is started up but before we enter our login.

What mechanism does the copy of those .resource files during compilation, and how can I access it?  I'm guessing it must be something individual to each project, because there are some modules that copy everything correctly, some which copy incorrectly only if you manually delete the contents of /bin, and some which delete and copy incorrectly every time.

Can someone point me to the script or project area that controls this process?
.NET ProgrammingC#

Avatar of undefined
Last Comment
FrancineTaylor

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Jacques Bourgeois (James Burger)

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
FrancineTaylor

ASKER
The reason we are doing our icons with .resource files is that we have hundreds of icons and dozens of projects and embedding every icon in every project is just not practical.  This way, an icon change only requires that we edit a single file instead of dozens.

The post build event sounds like the best candidate for what I want.  I've discovered that there's some kind of complicated deployment scripting that does the job for the compiled/installed systems, which is why things work for them.  The resource files aren't even included anywhere in the projects that I can find.  I have no idea what mechanism is copying them in the first place but they expect me to fix the process.

I'd like to build a batch file in the highest directory that takes in the resource files and all the modules.  The name of it is ClientSide.  The batch file would copy all .resources files from the directory where they are stored, into the bin directory of the project being compiled.

So, the batch file would say:

copy /ResourceRepository/*.resources  <bin of current project>

Then I would want to put something in the project's Post Build Event Command Line to say execute this file, which would reside two directories lower, and would need to take the project name or directory path as a parameter.

How would I tell the batch file to take a parameter?  Just "%1"?  And then how would I get the path and send it as a parameter?  Remembering that it is not just the current directory that I need, but the one below it as well?

So, as an example, if my top level directory was /ClientSide, and my project was /ClientSide/AR/AR_Host, I would need to send "/AR/AR_Host" to the batch file.
Jacques Bourgeois (James Burger)

Search the documentation for "Pre-build Event/Post-build Event Command Line Dialog Box". You will get a list of the macro commands that you can use inside those scripts. The one for the bin is $(TargetDir). There are many others to get the project directory, the solution directory, paths relative to a few others, etc.

I suggest that you also give a look to the references in the See Also of that documention page. You will get a few sample scripts that could be useful.
FrancineTaylor

ASKER
I've looked through that documentation and all the examples I could find, but I am still unable to find the key element to this task.  How would I call a batch file which is one directory below $(SolutionDir)?

I've tried:    call  ..\$(SolutionDir)frantest.bat

...but got this error:

The command "call ..\c:\ClientSide\VP\frantest.bat" exited with code 1

I can see how it misinterpreted what I asked for, but I don't know how to fix it...
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
Jacques Bourgeois (James Burger)

I understand your need better with the last post.

As I see them, the build event scripts use Visual Studio standards. In Visual Studio, the project directory is seen as a root and everything is under that directory. So they do not react to some other standards such as the ..\ to move up one directory.

However, the script can call an executable file and pass command lines parameters to it. You have an example of such an .exe in the "How to: Specify Build Events (Visual Basic)" topic of the documentation.

An application will react to the ..\. Store it on a network drive that is seen by all the programmers and call it from you script, passing $(SolutionDir) as a parameter. The application will do the job.
SOLUTION
FrancineTaylor

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
FrancineTaylor

ASKER
Thanks again for spending so much time helping me!