[wix-devs] Just when I thought ...

Ron Martin cpuwzd at comcast.net
Thu Jul 1 16:42:06 PDT 2021


Just when I thought I had some significant issues behind me, they seem 
to have popped up again.

Here's the scenario:

I modify a macro in wcautil.h at 
...\wix4\src\libs\wcautil\WixToolset.WcaUtil\inc\wcautil.h.

The modified macro is referenced by scauser.cpp at 
...\wix4\src\ext\Util\ca\scauser.cpp during the installation
of test.msi, which is produced when my test case is run. For this to 
work, the code produced by compiling
scauser.cpp must be embedded into test.msi.

The procedure that I thought was working involves using build.cmd at 
...\wix4\build.cmd to rebuild everything.
Doing so also runs all the test cases, including mine. So far, so good.

I install the version of test.msi that has thus been produced and the 
windows installer log (which I have enabled
in the registry) indicates that my modification of the macro has had no 
effect.

I open Util.wixext.sln at ...\wix4\src\ext\Util\Util.wixext.sln in 
Visual Studio 2019 and examine scauser.cpp.
I highlight the problematic macro reference and press F12 to see its 
definition. The tab that opens is associated
with a path outside my repo:

C:\Users\...\.nuget\packages\wixtoolset.wcautil\4.0.0-preview.0\build\native\include\wcautil.h

The Solution Explorer lists this file as an external dependency of the 
utilca project.

There is no legitimate way to modify a published nuget package. I want 
the code in my version of the
repo to depend on its own copy of the code. If there is a work-around 
for this, I have no idea what it is.
It might require the creation of local nuget packages, the restructuring 
of project files. or more.

Even if I could make this work, consider the next step: I put in a pull 
request for just source code
that I've changed, leaving out any behind-the-scenes magic that I might 
have used to make it work
on my computer. The next developer (or the CI robot) who tries to build 
the develop branch will be right
back where I am now.

Extensions should not depend unnecessarily on published API's and 
interfaces. I can't imagine a new
extension depending on the macros I'm trying to change. Why do they have 
to be publicly defined at all?
If I'm inside the extension making changes and additions, I should be 
able to change these definitions
when it is appropriate or necessary to do so.

I could add a local header file, defining parallel macros with new names 
and change all the references
to the original macros to use the new macros. This would leave the 
original macros unreferenced and
ripe for deletion at the time of the next release, but it would also 
leave sub-optimal macro names that
could be changed back to the originals in the next release. This might 
be more maintenance debt than
the project should assume.

I might just try this to see how far I can get. Any thoughts?

Ron



More information about the wix-devs mailing list